cin.sync 和 clear 不起作用


        while(cout << "How many elements do you want: " && !(cin >> el))
        {
            cin.sync();
            cin.clear();
            cout << " Invalid input!n";
        }

el 是一个整数,当我输入一个字符时,循环是无限的。我按照 SO 中的一篇文章来修复错误的输入,但它不起作用,它会无限循环打印"你想要多少个元素:无效输入!我也尝试忽略(10000,""),但仍然不起作用...

当从流读取时发生错误时,将设置错误标志,并且在清除错误标志之前无法再读取。

这就是为什么你会得到一个无限循环。

而是使用 :

cin.clear();  // clears the error flags  
// this line discards all the input waiting in the stream
cin.ignore(std::numeric_limits<std::streamsize>::max(), 'n');

cin.sync()之前执行cin.clear()。 它对我有用。

最新更新