C++ cin輸入int類型,故意輸入其餘字符的問題

本身作了個簡單的總結,不知道準確否,有的話請跟帖指教,THX。
//cin讀取:
//①忽略開頭whitespace字符 
//②碰到第一個非whitespace字符,若是是正確類型則讀取並繼續;
// 若是是非正確類型,則結束讀取並call setstate(ios_base::failbit);
//③若是讀取到正確類型字符,碰到其餘字符(包括whitespace)則結束讀取;

因此要求int,故意錯誤輸入有以下幾種狀況(舉例):
abc (fail)
123abijgiarg (good)
123.234 (good,同上)
因此cin輸入int後,爲了防止各類故意錯誤輸入,我通常採用下面幾種方法:
int num;
cin >>num;
cin.ignore(1024,'\n');
if (cin.fail()){cin.clear(); ...}
能夠保證後續程序正確運行,處理但沒有判斷如123abc類的輸入錯誤,只讀取了123
--------------------
char buf[20];
cin.getline(buf,20);
int num=atoi(buf);
if (num==0)...
比較好防止各種錯誤,可是對於正確輸入的0, 沒法判斷,適合於輸入0也錯誤的狀況
--------------------
int num;
string excess;
cin >>num;
getline(cin,excess);
if (cin.fail()||excess!=""){cin.clear(); ...}
能夠有效防止全部錯誤輸入 (我的想的,可是怎麼網上沒見到有人這樣用?是否有什麼問題?)
-------------------------
其餘更好的方法,不知道了ios

相關文章
相關標籤/搜索