我正在尝试编写一个代码来提示用户输入来自cin。
mysqli_error()
但是,当我输入非整数类型时,编译器会继续打印“重新输入有效值!”这一行。我不知道我的代码有什么问题!有人可以纠正吗?非常感谢你。
答案 0 :(得分:4)
试试这个:
bool done = false;
int year;
for (std::string line;
std::cout << "Enter a year: " && std::getline(std::cin, line); )
{
std::istringstream iss(line);
if (iss >> year >> std::ws && iss.get() == EOF) { done = true; break; }
std::cerr << "Failed to parse input '" << line << "', please try again.\n";
}
if (!done) { std::cerr << "Premature end of input.\n"; }
else { std::cout << "Input: " << year << "\n"; }
答案 1 :(得分:2)
这是我的方法:
int main() {
int year;
while (true) {
cout << "Enter a valid year: ";
cin >> year;
if (cin.fail()) {
cin.clear(); cin.ignore();
cout << "Re-enter a valid value! " << endl;
} else break;
}
return 0;
}
答案 2 :(得分:0)
您所描述的问题在于:
while (cin.fail())
{
cout << "Re-enter a valid value! ";
}
看起来你还没有完全理解这里发生了什么,所以我会为你解决这个问题。
代码翻译成如下:
“当cin.fail()为true时,输出”重新输入有效值! “到控制台”
它将持续发挥作用,因为没有办法摆脱循环。
我不认为cin.fail()是你想在这里使用的,看起来你想要一个算法告诉你日期是否有效,如果它无效,重复查询到用户可以输入好的数据。从概念上讲,这是一种很好的做法,你是在正确的轨道上,但你需要学习更多。
我建议阅读一些有关输入/输出的教程,并研究输入验证。
这是学习C ++ http://www.cplusplus.com/doc/tutorial/
的绝佳资源以下是有关输入验证的一些信息http://www.cplusplus.com/forum/beginner/121194/