提问人:punypaw 提问时间:4/16/2021 更新时间:4/16/2021 访问量:391
涉及多次运行“cin.fail()”的循环
loop involving "cin.fail()" running multiple times
问:
我在使用以下代码时遇到了问题。它旨在不断要求有效输入,直到输入整数或双精度。它按预期工作,但是当我输入长度大于 1 的字符串时,它将多次运行循环。例如,输入“hello”,并导致“请输入有效号码”,打印 5 次。有趣的是,“h llo”只会打印句子 4 次。
int gamenumber;
while(true)
{
cin >> gamenumber;
if(cin.fail())
{
cout << "Please enter a valid number" << endl;
cin.clear();
cin.ignore();
} else
break;
我确实设法通过将“cin.ignore()”替换为“cin.ignore(1000, '\n')”来解决这个问题。
但无论如何,我不明白为什么仅靠“cin.ignore()”不能解决这个问题,这让我很烦恼?有没有办法在不使用“cin.ignore(1000, '\n')”的情况下修复上述代码?(这是家庭作业的一部分,我们可能不允许使用“cin.ignore(1000, '\n')”)
谢谢!
答:
1赞
prehistoricpenguin
4/16/2021
#1
您需要与重载的一起使用,请参阅此处的 anser。ignore
或者你只需要运行来排空内容物,但这种方式更慢且没有必要。getline
#include <iostream>
#include <string>
int main()
{
double n;
while( std::cout << "Please, enter a number\n"
&& ! (std::cin >> n) )
{
std::cin.clear();
std::string line;
std::getline(std::cin, line);
std::cout << "I am sorry, but '" << line << "' is not a number\n";
}
std::cout << "Thank you for entering the number " << n << '\n';
}
评论
std::cin.ignore (std::numeric_limits<std::streamsize>::max(), '\n');