【发布时间】:2015-03-24 23:19:07
【问题描述】:
我的 C++ 教授坚持认为,在检查输入故障时,必须为每个单独的输入使用单独的 while() 循环。他指出,以下检查在单个 cin 语句中收集的多个输入的方法将不起作用:
while (!good){
cout << "Enter the length and the width of the rectangle: ";
cin >> length >> width;
if(!cin){
cout << "Bad input, try again" << endl;
cin.clear();
cin.ignore(200, '\n');}
else {
good = true;}}
他提出的方法:
bool good = false;
while (!good){
cout << "Enter the length rectangle: ";
cin >> length;
if(!cin){
cout << "Bad input, try again" << endl;
cin.clear();
cin.ignore(200, '\n');}
else {
good = true;}}
while (good){
cout << "Enter the width rectangle: ";
cin >> width;
if(!cin){
cout << "Bad input, try again" << endl;
cin.clear();
cin.ignore(200, '\n');}
else {
good = false;}}
我上面的方法似乎工作得很好。如果任何一个输入都输入了非数字字符,循环将提示输入新的输入并清除失败状态。
像我所做的那样检查输入失败是否只是被认为是错误的形式?我希望更清楚地了解为什么我的方法是错误的。如果我的方法有问题,有没有一种方法可以检查输入失败,而无需为每个用户输入使用单独的循环?我主要问是因为我正在编写一个程序,该程序涉及从文件中获取许多输入,并且单独检查每个变量似乎过于乏味。我在想一定有更好的方法。
【问题讨论】:
-
您的教授需要了解这种称为 do-while 的新语法(只有大约 40 年的历史)。
-
与希腊化名更接近:多注意,代码的两个版本都不会检查
eof标志。 -
您可能会发现C++ FAQ: How can I get std::cin to skip invalid input characters? 很有用(请参阅第二个代码示例。)
-
@remyabel:两种变体都已经这样做了。
-
@BenVoigt 你看链接了吗?我说的是减少代码的大小。
标签: c++