c++在输入类型不符的情况
正常情况,以输入int型为例
- 忽略开头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(); …}
可以保证读取数值的进行
char buf[20];
cin.getline(buf,20);
int num=atoi(buf);
if (num==0)
能较好的处理输入错误的情况