我是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
语句正在执行。造成这种情况的原因是什么?
答案 0 :(得分:2)
您正在使用char *
比较operator==
。让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
,所以没有分配。因此输出会导致未定义的行为。