我对 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
语句正在执行。这是什么原因造成的?
您正在比较char *
使用operator==
. 要么让oper
是std::string
代替
std::string oper
要使用此处列出的字符串比较:http : //en.cppreference.com/w/cpp/string/basic_string/operator_cmp
或者,如果您需要使用 achar *
进行某些限制,请使用strcmp
:
if (!strcmp(oper, "+")) {
// ...
您还需要将操作数变量指向某个缓冲区,以便将流读入。这有点复杂,我只是建议将 的类型更改oper
为std::string
。
您拥有的代码的问题在于它正在比较指向 char 数组的指针。您从输入方法中得到的将是来自输入流的新字符串,并且永远不会与程序中的只读字符串具有相同的地址。
因此,由于没有任何条件是true
,因此尚未分配 ans 。所以输出它解释了一个未定义的行为。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句