【发布时间】:2014-08-08 05:07:46
【问题描述】:
在基于一组指令创建程序时,我在设计伪代码和实现实际代码方面做得很好。我觉得我缺乏的是检查用户的输入(无论是有效还是无效)。在练习编程时,我创建了自己的方法来检查验证用户的输入。但是代码很长,我觉得不够(我会解释原因)。我想知道是否有更好的方法来检查用户的输入。以及其他程序员如何实现他们的代码。
这就是我验证用户输入的方式:
if(cin.fail()) {
cout << "Invalid Input" << endl;
cout << "Now Exiting..." << endl;
return;
}
// I didn't know how to skip a line while in code
while(input < 0) {
cout << "Invalid Input" << endl;
cout << "Enter radius: " << endl;
cin >> input;
if(cin.fail()) {
cout << "Error: Invalid Input" << endl;
cout << "Now Exiting..." << endl;
return;
}
}
当 cin 无法将值单独存储到变量中时(第 1 - 5 行,第 11 -15 行)我退出的原因是因为如果我将 cin.fail() 添加到 while 条件并尝试输入一个字母,它开始一个无限循环。我做了一些研究,发现你必须先 cin.sync(),然后是 cin.clear()。但我仍然得到无限循环。
代码如下:
do {
cin.sync()
cin.clear();
cout << "Enter radius: ";
cin >> input;
} while(input < 0 || cin.fail());
如果我做错了什么,看看更好的方法来验证用户的输入会很有帮助。
【问题讨论】:
-
只需使用
while (getline(cin, somestring))。它会让您的生活更轻松。 -
更一般地,阅读 C++ 中的错误处理。使用 try、catch 和 throw 真的会帮助你。
-
如果您想进行真正强大的验证,请使用一些正则表达式。从 C++11 开始,它是 STL 的一部分。允许您说“密码必须是 12 个字符,一个大写字母和一个特殊字符”之类的内容,然后只需几行即可检查。正则表达式并不像看起来那么难,非常值得学习。
标签: c++ validation user-input infinite-loop cin