c++遇到的警告

记录一个警告,不知道如何解决,望走过路过的大佬指点一下。

背景:用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个而不是第一个要重新输入的。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值