与 IF 语句C++的字符串比较?



我对C++很陌生,大约 30 分钟前刚开始使用在线课程学习。我有点困惑为什么这个字符串比较在基本的数学脚本中不起作用:

#include <iostream>
#include <string>
using namespace std;
int main() {
int one, two, answer;
char *oper;
cout << "Add two numbersnnEnter 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;
}

oneopertwo的值分别是1"+"1,但最终1 + 1 = 4201435被打印出来。没有执行任何if/else if语句。这是什么原因造成的?

您正在使用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 数组进行比较。从输入法中获取的将是来自输入流的新字符串,并且永远不会与程序中的只读字符串具有相同的地址。

因此,由于没有一个条件true,因此尚未分配ans。因此,输出它说明了未定义的行为

相关内容

  • 没有找到相关文章

最新更新