我对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;
}
one
、oper
和two
的值分别是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。因此,输出它说明了未定义的行为。