记录一个警告,不知道如何解决,望走过路过的大佬指点一下。
背景:用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个而不是第一个要重新输入的。
本文探讨了使用C++进行用户输入验证的方法,特别是在处理非法输入时的数组清空策略。通过实例展示了如何避免非法数据影响最终计算结果,并讨论了程序中出现警告的原因及可能的解决方案。
1205

被折叠的 条评论
为什么被折叠?



