c语言以%d形式读入一个整数,如何判断其不是字符

比如
scanf("%d",&n);
if(......)
输入错误;
求指教
没表述清楚
根据ascii表没法判断 因为%d也能把字符读成一串整数,
而我这个程序不管你是输入整数还是字符都会产生一个结果
字符读进来的一个%d数值算出的结果显然不行
所以要判断一下
这么说吧:
我目前需要接受一个整数,然后经过一些运算,得到一个结果,
但是你可能不小心按了几个个字母或者别的什么键 回车了,总要反馈一些信息吧!

你这种是不肯能判断出来的。


j = scanf("%d",&i); 可以判断scanf的返回值,如果输入的是非数字开头,那么scanf的返回值是0。如果输入的是数字开头,即使是56bnfd123这种东西,scanf仍然会把56读出来,赋值给i,并且返回值是1。


你的这个要求目前从我这来看好像实现不了,看看其他C语言的高手有没有好方法。


按照楼主的要求,那就不能用%d了,要用%s或者gets函数,按照字符串读进来。然后每一个去判断是否在0到9之间,如果都在,就认为是正确的,再把字符串转换成整数就行了。


如果有一个不在0到9之间就报错。


程序如下,有个限制就是输入不能大于500个字符,不然就会出错。

int i,j;

    char c[500];

    j = scanf("%s",c);

    for(i = 0; i < 500; i++)
    {
        /* 结束符退出 */
        if(c[i] == '\0')
        {
            break;
        }

        /* 不是字符串报错 */
        if(c[i] < '0' || c[i] > '9')
        {
            printf("ERROR");
            system("pause..");
            return;
        }
    }

    /* 空字符 */
    if(i == 0)
    {
        printf("ERROR");
        system("pause..");
        return;
    }

    j = atoi(c);

    printf("OK");

    system("pause..");

    return;

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-11-12

可以通过 ASCII 码的值来判断,不知道你这里说的字符是什么意思,不过给你举个例子:

if(n>=48 && n<= 57)
    {
        你输入的数就是0~9
    }
不知道我说的清楚么

第2个回答  2014-11-12
%d读进来的是int型数字,如果不符合就读不到,为什么还要判断? 读到了就一定是int型数字, int型数字不算字符? 你思维有点问题
第3个回答  2014-11-12
你这样好像不能吧, int本来就是读取整数。你要判断去那就只有0-9去排除了。
相似回答