我试图找到一种方法,即使在使用std::cin.fail()
进行了无效输入之后,也能继续请求用户输入。然而,当输入无效时,程序只是在循环中运行,即使使用std::cin.ignore()
也不会在std::cin上暂停。
我试着将std::cin.ignore()
移到std::cin >> input
之前,虽然它确实工作,但程序首先停在std::cin.ignore()
行(首先需要一个不会使用的输入),然后转到std::cin
输入行,这不是我想要的(我希望它立即请求输入)。
有什么原因吗?我该如何修复它?
double input;
do {
std::cin.clear();
std::cout << "Enter a double value : ";
std::cin >> input;
if (std::cin.fail()) {
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
std::cout << "Invalid input!\n";
}
} while (std::cin.fail());
1条答案
按热度按时间2q5ifsrm1#
必须添加以下行
紧挨线的前面
否则,对
std::cin.ignore
的调用将失败,因为流处于失败状态。但是,这将导致外部循环的循环条件不起作用。因此,整个代码应更改为: