当先锋百科网

首页 1 2 3 4 5 6 7

一、判断输入是否为数字

通常使用方法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 无法判断出输入数据错误!!!!!!!