以下代码包含逻辑错误 每次我运行它并输入1或0代码 在while循环中仍然执行。 谁能告诉我为什么?
bool getmove()
{
bool move;
cout << "Would you like to make the first move?(1 for yes 0 for no)\n";
cin >> move;
while(move != 1 || move != 0 || !cin.good())
{
if(!cin.good())
{
cout << "ERROR please try again\n";
cin.clear();
cin.ignore(80,'\n');
cin >> move;
}
else
{
cout << "Invalid input please try again\n";
cin >> move;
}
}
return move;
}
答案 0 :(得分:1)
看看这一行:
while(move != 1 || move != 0 || !cin.good())
总是是move != 1 || move != 0
的情况(因为它不能同时存在)。
此外,你可以通过读取字符串之类的内容并测试它来避免一些麻烦,而不是依赖于强制转换。
答案 1 :(得分:1)
如果你正在尝试编写一个可以验证布尔值输入的函数,那么你的代码可以简化为:
bool getmove()
{
bool move;
cout << "Would you like to make the first move?(1 for yes 0 for no)\n";
while (!(cin >> move))
{
cout << "Invalid input please try again\n";
cin.clear();
cin.ignore(80, '\n');
}
return move;
}
重要的是要意识到while (!(cin >> move))
将重复循环,直到可以从控制台读取有效的布尔值并将其写入move
。