我正在读一本关于 C++ 的书(C++ Primer Plus)并找到了这段代码。
该程序的目的是,如果用户希望将数字输入读取到,例如数组->
1)将cin重置为新输入
2)摆脱错误的输入
3)提示用户重试(书上原话)
这是代码->(从书中复制的确切代码)
#include <iostream>
const int Max=5;
int main()
{
using namespace std;
//get data
int golf[Max];
cout<<"please enter your golf scores.\n";
cout<<"you must enter "<<Max<<" rounds.\n";
int i;
for(i=0;i<Max;i++) {
cout<<"round #"<<i+1<<": ";
while(!(cin>>golf[i])) {
cin.clear();
while(cin.get()!='\n')
continue;
cout<<"PLease enter a number: ";
}
}
double total=0.0;
for(i=0;i<Max;i++)
total+=golf[i];
cout<<total/Max<<" = average score "<<Max<<" rounds\n";
return 0;
}
我不明白的特定部分是:
cin.clear();
while(cin.get()!='\n')
continue;
我对功能有点不清楚cin.clear()
,需要continue
这里,以及 while 测试条件的作用以及它是如何工作的。
试运行->
(斜体部分为用户输入)
请输入您的高尔夫球成绩。
您必须参加 5 轮.
第1轮: 88
第二轮: 87
第三轮: duh
请输入一个数字: 103
第四轮: 94
第五轮: 86
91.6 = 5轮平均分
while(!(cin>>golf[i]))
{
cin.clear();
while(cin.get()!='\n')
continue;
cout<<"PLease enter a number: ";
}
首先我们以 while 条件为例。它似乎检查表达式的值(cin >> golf[i]
) 是假的。的价值cin >> golf[i]
is cin
本身。那么怎么可能是假的呢?如果输入流的>>操作失败,则会设置一个名为fail的标志。这就是运营商!检查。所以条件意味着在尝试读取对象 cin 已失败设置的数字后,执行...
现在,一旦设置了失败标志,您就无法对输入流执行太多操作。除非重置失败标志,否则您将无法继续从流中读取数据。就是这样cin.clear()
does.
然后,它通过逐字符读取直到到达行尾来咀嚼错误输入行的其余部分(自 >> 失败以来,该输入行未被消耗)。
最后它提示用户输入新的内容。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)