在这种情况下,我们要求用户输入四个符号中的一个,但他们输入了“k”代替。“K”是一个有效的字符,因此std::cin愉快地提取它变量运算,这会返回到主。但我们的程序不希望这种情况发生,所以它不妥善处理这种情况下(因此从来没有输出任何东西)。
这里的解决办法很简单:做输入验证。这通常由3个步骤组成:
1)检查用户输入是否是你所期望的。
2)如果是的话,将该值返回给用户。
3)如果没有,告诉用户出错了,让他们再试一次。
在这种情况下,我们要求用户输入四个符号中的一个,但他们输入了“k”代替。“K”是一个有效的字符,因此std::cin愉快地提取它变量运算,这会返回到主。但我们的程序不希望这种情况发生,所以它不妥善处理这种情况下(因此从来没有输出任何东西)。
这里的解决办法很简单:做输入验证。这通常由3个步骤组成:
1)检查用户输入是否是你所期望的。
2)如果是的话,将该值返回给用户。
3)如果没有,告诉用户出错了,让他们再试一次。
这是一个更新的getoperator()功能,并输入验证。
这里的解决办法很简单:做输入验证。这通常由3个步骤组成:
1)检查用户输入是否是你所期望的。
2)如果是的话,将该值返回给用户。
3)如果没有,告诉用户出错了,让他们再试一次。
这是一个更新的getoperator()功能,并输入验证。
2
3
4
5
6
7
8
9
10
11
12
13
14
15
char getOperator()
{
while (1) // Loop until user enters a valid input
{
std::cout << "Enter one of the following: +, -, *, or /: ";
char op;
std::cin >> op;
// Check whether the user entered meaningful input
if (op == '+' || op == '-' || op == '*' || op == '/')
return op; // return it to the caller
else // otherwise tell the user what went wrong
std::cout << "Oops, that input is invalid. Please try again.\n";
} // and try again
}
在这种情况下,我们要求用户输入四个符号中的一个,但他们输入了“k”代替。“K”是一个有效的字符,因此std::cin愉快地提取它变量运算,这会返回到主。但我们的程序不希望这种情况发生,所以它不妥善处理这种情况下(因此从来没有输出任何东西)。
这里的解决办法很简单:做输入验证。这通常由3个步骤组成:
1)检查用户输入是否是你所期望的。
2)如果是的话,将该值返回给用户。
3)如果没有,告诉用户出错了,让他们再试一次。
这是一个更新的getoperator()功能,并输入验证。
1
2
3
4
5
6
if (std::cin.fail()) // has a previous extraction failed?
{
// yep, so let's handle the failure
std::cin.clear(); // put us back in 'normal' operation mode
std::cin.ignore(32767,'\n'); // and remove the bad input
}