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(); ...}
可以有效防止所有错误输入 (个人想的,但是怎么网上没见到有人这样用?是否有什么问题?)
-------------------------
其他更好的方法,不知道了

你可能感兴趣的:(C++ cin输入int类型,故意输入其他字符的问题)