记录一个警告,不知道如何解决,望走过路过的大佬指点一下。
背景:用c++写了一个简单的功能:定义一个数组,可以容纳5个整数,数据来自用户的输入,并返回累加和和均值。
下面是代码
#include<iostream>
using namespace std;
int main()
{
const unsigned short ITEM = 5;
int num[ITEM];
cout << "请输入"<<ITEM<<"个整数" << endl;
int i = 0;
for(int i=0;i<ITEM;i++)
{
cout << "请输入第"<<i+1<<"个数据\n";
while (!(cin >> num[i]))
{
cin.clear();
cin.ignore(100, '\n');
cout << "数据错误,请重新输入!\n";
}
}
int total = 0;
for (int i = 0; i < ITEM; i++)
{
total += num[i];
}
double mean = (double)total / ITEM;
cout << "总和:" << total << "均值:" << mean << endl;
return 0;
}
运行结果
说明:因为功能比较简单,就加入了一个输入检查的功能,验证一下。
如下图所示,当我们输入一个浮点数据时,会提示数据错误,然后重新输入,然而程序最后还是把浮点数据强制变为整形进行了求和,应该是数组中已经读取了这个浮点数据并且转为了整形,因此没有清空。那么清空一下试试。
如下图所示,在自检的while循环中对i进行处理,也就是当遇到错误时,i-1,对当前的值重新输入
结果如下,可以发现错误的数据已被新输入的数据替代。
但是,回头再看主程序,发现了一处警告。
百思不得其解,难道说是之前读取的错误数据并未在缓存区域清空吗?又该怎么处理呢?
还有就是cout打印重新输入后,为什么打印出的是第2个而不是第一个要重新输入的。