创建一个数组,记录五个数字,求平均值。并且程序可以判断输入是否为整型。
#include <iostream>
using namespace std;
const int Max = 5;
int main()
{
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;
}
输出结果
please enter your golf scores.
You must enter 5 rounds.
round #1: 23
round #2: 1
round #3: 44
round #4: 123
round #5: ewe
please enter a number:23
42.8= average score5 rounds
关键代码:
while (!(cin >> golf[i])){
cin.clear();
while (cin.get() != '\n')
continue;
cout << "please enter a number:";
}
如果用户输入23,则cin表达式为true,因此将一个值放到数组中;而表达式!(cin>>golf[i])为flase,因此结束内部循环。
如果用户输入 ewe,则cin表达式将为false,因此不会将任何值放到数组中;而表达式!(cin>>golf[i])将为true,因此进入内部的while循环。该循环的第一条语句是用clear()方法重置输入,如果省略这条语句,程序将拒绝继续读取输入。接下来,程序在while循环中使用cin.get()来读取行尾之前的所有输入,从而删除这一行中的错误输入(对于cin.get(),能删除这一行的错误输入不是很理解)。另一种方法是读取到下一个空白字符,这样将每次删除一个单词,而不是一次删除整行。最后程序告诉用户,应该输入一个数字。
cin.clear()
cin.clear()默认参数为0,即无错误,正常操作。当我们输入英文字母’ewe’时,它的状态标识改为false,即错误,用cout对用户输出信息,再用cin.clear让错误标识改回为0,让我们可以继续输入,再清空流数据继续输入。如果我们没有了cin.clear(),则会进入死循环,其过程为我们输入了英文字母,它的状态标识便为false,当运行到条件判断时,便总是回到错误的条件表示里,并且我们再也没办法输入,因为错误的表示关闭了cin,所以会进入死循环。