我试图只接受整数作为输入,并在进行某种验证的同时循环它。问题是,当用户沿着“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: ";
}
答案 0 :(得分:3)
你可以使用它。
cin.ignore (std::numeric_limits<streamsize>::max (), '\n') ;
它会跳过所有行,无论你输入多少个无效字符,都不会得到额外的循环迭代。
答案 1 :(得分:0)
你的while循环迭代的原因是没有完全提取流,所以只使用这一行
cin.ignore (std::numeric_limits<streamsize>::max (), '\n') ;
循环将只迭代一次,因为无论你提供多少大输入都将被提取。 Cin.ignore()仅从流中删除一个字符。
在你的情况下,如果你输入“two”,那么在第一次迭代之后,只会提取“t”并且第二次迭代的输入将是“wo”。但是通过添加此行,第二次迭代中的流将为空,并将从用户获取输入。