C++ 中的字符串比较与 IF 语句?
String Comparison in C++ with IF Statements?
我是 C++ 的新手,大约 30 分钟前才开始使用在线课程学习。我有点困惑为什么这个字符串比较在基本数学脚本中不起作用:
#include <iostream>
#include <string>
using namespace std;
int main() {
int one, two, answer;
char *oper;
cout << "Add two numbers\n\nEnter your first number" << endl;
cin >> one;
cout << "Choose an operator: + - * / %%" << endl;
cin >> oper;
cout << "Enter your second number" << endl;
cin >> two;
if (oper == "+") {
answer = one + two;
}
else if (oper == "-") {
answer = one - two;
}
else if (oper == "*") {
answer = one * two;
}
else if (oper == "/") {
answer = one / two;
}
else if (oper == "%%") {
answer = one % two;
}
cout << one << " " << oper << " " << two << " = " << answer << endl;
return 0;
}
one
、oper
、two
的值分别为1
、"+"
、1
,但在最后,打印出 1 + 1 = 4201435
。正在执行 if
/else if
个语句中的 None 个。这是什么原因造成的?
您正在使用 operator==
比较 char *
。要么让 oper
成为 std::string
而不是
std::string oper
要使用此处列出的字符串比较:http://en.cppreference.com/w/cpp/string/basic_string/operator_cmp
或者如果您需要使用 char *
进行某些限制,请使用 strcmp
:
if (!strcmp(oper, "+")) {
// ...
您还需要让您的操作数变量也指向某个缓冲区,以便流读入。这有点复杂,我只是建议将 oper
的类型更改为 std::string
。
您的代码存在的问题是它正在比较指向 char 数组的指针。您从输入法中获得的内容将是来自输入流的新字符串,并且永远不会与程序中的只读字符串具有相同的地址。
所以因为条件none是true
,ans还没有赋值。因此输出它说明了 未定义的行为。
我是 C++ 的新手,大约 30 分钟前才开始使用在线课程学习。我有点困惑为什么这个字符串比较在基本数学脚本中不起作用:
#include <iostream>
#include <string>
using namespace std;
int main() {
int one, two, answer;
char *oper;
cout << "Add two numbers\n\nEnter your first number" << endl;
cin >> one;
cout << "Choose an operator: + - * / %%" << endl;
cin >> oper;
cout << "Enter your second number" << endl;
cin >> two;
if (oper == "+") {
answer = one + two;
}
else if (oper == "-") {
answer = one - two;
}
else if (oper == "*") {
answer = one * two;
}
else if (oper == "/") {
answer = one / two;
}
else if (oper == "%%") {
answer = one % two;
}
cout << one << " " << oper << " " << two << " = " << answer << endl;
return 0;
}
one
、oper
、two
的值分别为1
、"+"
、1
,但在最后,打印出 1 + 1 = 4201435
。正在执行 if
/else if
个语句中的 None 个。这是什么原因造成的?
您正在使用 operator==
比较 char *
。要么让 oper
成为 std::string
而不是
std::string oper
要使用此处列出的字符串比较:http://en.cppreference.com/w/cpp/string/basic_string/operator_cmp
或者如果您需要使用 char *
进行某些限制,请使用 strcmp
:
if (!strcmp(oper, "+")) {
// ...
您还需要让您的操作数变量也指向某个缓冲区,以便流读入。这有点复杂,我只是建议将 oper
的类型更改为 std::string
。
您的代码存在的问题是它正在比较指向 char 数组的指针。您从输入法中获得的内容将是来自输入流的新字符串,并且永远不会与程序中的只读字符串具有相同的地址。
所以因为条件none是true
,ans还没有赋值。因此输出它说明了 未定义的行为。