char sign;
cout << "Enter '+' for addition or '-' for subtraction: ";
cin >> sign;
if ( sign != '+' && sign != '-' ) {
cout << "you can only enter '+' or '-'!\n";
return 1;
}
如果我输入
+32423
,输入对 cin
仍然是正确的(它会通过检查),因为 +
将自动设置为符号变量,如果有,32423
也会存储到我的下一个变量中:cin >> number;
如何更改代码以使
+32423
与 cin
不正确? 最佳答案
您需要准确确定您需要用户输入的内容以及使其有效的内容。在我看来,您想接受来自用户的整行输入(因此您应该将 std::getline
与 std::string
一起使用),然后您只想接受恰好是 "+"
和 "-"
的字符串。
std::string sign;
std::getline(std::cin, sign); // Gather input
if (sign != "+" && sign != "-") { // Parse input
// ...
}
// ...
正如@H2C03 提到的,将输入和解析分开是个好主意。在这种情况下,解析就像将输入行与字符串
"+"
和 "-"
进行比较一样简单。关于c++ - 如何处理这种副作用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21215322/