您的位置:首页 > 其它

判断输入是否合法

2016-05-10 22:12 204 查看
一、判断输入是否为数字

通常使用方法1和3,方法2和4无法保证一定能判断正确。

1)函数isdigit

表头文件

#include<ctype.h>
定义函数
int isdigit(char c)
函数说明
检查参数c是否为阿拉伯数字0到9。
返回值
若参数c为阿拉伯数字,则返回TRUE,否则返回NULL(0)。
2)当使用cin,cout输入流时

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 无法判断出输入数据错误!!!!!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: