2

我试图只接受整数作为输入并同时循环遍历它作为一种验证。问题是,当用户按照“Two”的行输入某些内容时,while 循环会在再次询问用户之前遍历输入 3 次不同的时间。有没有办法防止这种情况发生并跳过 3 次迭代?

cout << "Enter Student ID: ";
while(!(cin >> id))
{
    cout << "\nERROR: Please enter a Positive Whole Number" << endl;
    cin.clear();
    cin.ignore ();
    cout << "Enter Student ID: ";
}
4

2 回答 2

3

你可以使用这个。

cin.ignore (std::numeric_limits<streamsize>::max (), '\n') ;

它会跳过所有行,并且无论您输入多少无效字符,您都不会获得额外的循环迭代。

于 2012-11-25T07:46:09.000 回答
0

您的 while 循环迭代的原因是流没有被完全提取,所以只需使用这一行

cin.ignore (std::numeric_limits<streamsize>::max (), '\n') ;  

该循环将仅迭代一次,因为无论您提供多少输入,它都会被提取。Cin.ignore() 仅从流中删除一个字符。

在您的情况下,如果您输入“two”,那么在第一次迭代之后,只会提取“t”,第二次迭代的输入将是“wo”。但是通过添加这条线流将在第二次迭代中为空,并将从用户那里获取输入。

于 2012-11-25T09:58:48.990 回答