我尝试只接受整数作为输入,同时循环它作为一种验证。问题是,当用户输入类似“两个”的内容时,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: ";
}发布于 2012-11-25 15:46:09
你可以用这个。
cin.ignore (std::numeric_limits<streamsize>::max (), '\n') ;它将跳过所有行,并且无论您输入多少无效字符,您都不会得到额外的循环迭代。
发布于 2012-11-25 17:58:49
while循环迭代的原因是不能完全提取流,所以只使用下面这一行
cin.ignore (std::numeric_limits<streamsize>::max (), '\n') ; 循环将只迭代一次,因为无论您提供多少大的输入,它都会被提取出来。Cin.ignore()只从流中删除一个字符。
在你的例子中,如果你输入"two“,那么在第一次迭代之后,只会提取't‘,第二次迭代的输入将是"wo”。但是通过添加这一行,流在第二次迭代中将是空的,并将接受来自用户的输入。
https://stackoverflow.com/questions/13549190
复制相似问题