提示用户输入,直到C++正确为止
Prompt user input until correct C++
我正在尝试编写一个代码来提示来自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/
相关文章:
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 为什么这个 std::queue/指向结构的指针列表直到 List.Size() == 0 才释放内存?
- 如何从文本文件中读取数值,直到遇到字符类型?
- C++运行直到按键
- 我正在尝试使用 while 循环从字符串中删除字母,直到没有字母。我在这里做错了什么?
- 当 getline 直到新行才读取时会发生什么?
- 如何反复调用函数直到满足模拟?
- 如何打印下一个字母直到 Z 并继续到 A?
- 为什么即使直到最后才定义实际类型,也可以将依赖名称视为完整
- 如何创建一个 while 循环,继续循环,直到在C++中输入'using streams'键?
- 需要从存档中读取一行文本.txt直到找到"hhh",然后转到下一行
- 打印质数直到 N 以 C++
- 读取二进制文件直到结束 c++
- 按升序打印矢量的所有元素直到它为空而没有重复项的最有效方法是什么?
- 擦除矢量中的所有元素,直到第一个非零元素C++
- 延迟函数使打开的框架窗口冻结,直到指定的时间过去
- 继续运行程序而无需任何干预,直到要求退出为止
- 越界成员函数定义是否需要一个完全限定的类名,直到全局范围
- C++-打印素数直到N
- 如何等待密钥事件,直到进程在 QT 中完成