如何知道输入是否是数字?

时间:2014-08-09 09:41:23

标签: c gcc

我有问题。

我的程序需要检查输入是否为数字或其他任何内容,在CI搜索中发现isdigit(int)是为此提供的函数..但它只检查48<=ASCII<=57

但是,如果我只需检查数字怎么办?是否有isInteger()isReal()isFloat()等功能?如果没有,那么我该如何检查呢?

如果isdigit()也是如此,我遇到了问题:

#include<stdio.h>
#include<ctype.h>
int main(){
    int i = 1;
    printf("%d",isdigit(i));
    return 0;
}

它输出0,我不明白,它应该是非零值......

5 个答案:

答案 0 :(得分:4)

阅读isdigit(3)的文档。它适用于字符,而不适用于数字。所以isdigit('2')应该是真的(非零)。正如answered by pmg所见strtol(3) ...

如果你想测试UTF-8或Unicode的数字,那就复杂得多。使用库函数,例如来自Glib for Unicode的g_unichar_is_digit

你可能会犯一个根本性的错误。 number不是由数字组成的。用数字表示表示。所以两个,2(十进制),II(罗马符号),0b10或10(二进制), deux (法语),1+1(算术表达式),二(中文)....都代表相同的数字(它是一个的后继者),但只有第二个表示--decimal 2 - 有一个数字。

答案 1 :(得分:4)

假设输入是一个字符串,请使用strtol()和/或strtod()

实施例

#include <errno.h>
#include <stdio.h>
#include <stdlib.h>

int main(void) {
    char input[1000];
    // get input, don't forget to check for errors
    if (fgets(input, sizeof input, stdin) == NULL) {
        fprintf(stderr, "Error in input\n");
        exit(EXIT_FAILURE);
    }

    char *err;
    errno = 0;
    long x = strtol(input, &err, 10);
    if (errno || *err) {
        fprintf(stderr, "input is not an integer in the range for `long`.\n");
        exit(EXIT_FAILURE);
    }

    errno = 0;
    double y = strtod(input, &err);
    if (errno || *err) {
        fprintf(stderr, "input is not a correct double.\n");
        exit(EXIT_FAILURE);
    }

    // use x and y as needed

    return 0;
}

答案 2 :(得分:2)

来自isdigit手册页:

  

检查字符是否为十进制数

所以你可以看到这个函数适用于字符。它的返回值应该是非零的。

答案 3 :(得分:1)

你可以试试这个:

bool checkNumber(const char *str) 
{
    while(*str != '\0')
    {
        if(*str < '0' || *str > '9')
            return false;
        str++;
    }
    return true;
}

答案 4 :(得分:1)

试试这个男人......

#include<stdio.h>

int main()
{
char a;
printf("enter any int\n");
scanf("%c",&a);
if(isdigit(a))
{
    printf("input was a number");
}
else
    printf("input wasnt a number");
return 0;
}