提示用户输入,直到C++正确为止

Prompt user input until correct C++

本文关键字:C++ 直到 用户 输入 提示      更新时间:2023-10-16

我正在尝试编写一个代码来提示来自cin的用户输入。

int main()
{
int year;
cout << "Enter a valid year: ";
cin >> year;
while (cin.fail())
{
cout << "Re-enter a valid value! ";
}
}

但是,当我输入非整数类型时,编译器会不终止地打印"重新输入有效值!"一行。我不知道我的代码出了什么问题!有人能纠正一下吗?非常感谢。

试试这个:

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";   }

这是我的方法:

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;
}

您描述的问题是:

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/