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;

如何更改代码以使 +32423cin 不正确?

最佳答案

您需要准确确定您需要用户输入的内容以及使其有效的内容。在我看来,您想接受来自用户的整行输入(因此您应该将 std::getlinestd::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/

10-16 05:10