一、判断输入是否为数字
通常使用方法1和3,方法2和4无法保证一定能判断正确。
1)函数isdigit
表头文件 | #include<ctype.h> |
定义函数 | int isdigit(char c) |
函数说明 | 检查参数c是否为阿拉伯数字0到9。 |
返回值 | 若参数c为阿拉伯数字,则返回TRUE,否则返回NULL(0)。 |
int num;
while(!(cin>>num)){ //cin输入错误时执行下边语句
cin.clear(); //清除流标记
cin.sync(); //清空流
cout<<"输入了非数字字符"<<endl; //打印错误提示
}
3)创建数组存储输入的数据的每一位并判断
bool check( char *str )
{
int i;
for ( i = 0; i < strlen( str ); i++ )
if ( str[ i ] < '0' || str[ i ] > '9' )
return false;
return true;
}
若存在元素小于0或大于9的情况,则表明数字中有其他非数字元素存在,则肯定不是整形!
元素都在0-9之间,若数组的首位是0且0之后还有其余的元素如0123,这样的也不是数字!
可以通过有无小数点来区分整形和浮点型,且要保证小数点只出现一次。4)通过检测cin的状态来表明输入的是否为数字
int a;
cin >> a;
if(cin.fail()){
cout << "输入的不是数字!" << endl;
}
注:
int a; cin >> a; //输入3.5 此时cin.fail()和cin.bad()都为false,a的值为3
char a;cin >> a;//输入3.5 此时cin.fail()和cin.bad()都为false,a的值是'3'
int a;cin >> a;//输入c 此时cin.fail()为true,cin处于阻塞状态,可以判断出输入的数据类型错误。
只有在变量为整形或浮点型,输入数据不是整形或者浮点型的时候,才会使得cin处于错误状态;
若反过来变量是字符类型,输入数据是整形或者浮点型,都不会改变cin的状态。
而且对于特殊情况:
float a;cin >> a;//输入3.c 此时cin.fail()和cin.bad()为false 无法判断出输入数据错误!!!!!!!