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;
}

oneopertwo的值分别为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还没有赋值。因此输出它说明了 未定义的行为