記錄一個警告,不知道如何解決,望走過路過的大佬指點一下。
背景:用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個而不是第一個要重新輸入的。