我尝试使用if(!cin)来验证用户输入是否确实是整数。但是我的程序然后进入一个无限循环,从未询问过新输入

do{
    cin >> temp->data;
    if(!cin){
        cout << "Please enter a Number!" << '\n';
        correct=false;
        }
   }while(correct==false);

如果有人可以帮助我,那会很好:)

最佳答案

当std::cin无法读取输入时,将设置适当的错误标志。因此,您想使用std::cin.clear()重置标志,以便下一个输入操作将正常工作,然后使用std::cin.ignore(..)跳过所有内容,直到新行,以免格式类似输入。

while (!(std::cin >> temp->data))
{
        std::cin.clear();
        std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
        std::cout << "\nPlease enter a number!" << std::endl;
}
std::numeric_limits<std::streamsize>::max()返回流可以容纳的最大字符数,从而确保整行被忽略。

09-07 05:31