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個而不是第一個要重新輸入的。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章