我正在做一些IO,其中一行是,number number,但是当我使用时,

if(isdigit(buffer) > 0) { ... }

它失败了,我相信是因为每个数字之间都有一个空格。使用isdigit()时是否有方法不包含空间?还是有别的办法?谢谢。

最佳答案

正如评论中提到的,isdigit()和friends处理的是字符,而不是字符串。像这样的事情可以做你想做的:

bool is_digit_or_space(char * buffer) {
    while ( *buffer ) {
        if ( !isdigit(*buffer) && !isspace(*buffer) ) {
            return false;
        }
        ++buffer;
    }
    return true;
}

完整代码示例:
#include <stdio.h>
#include <ctype.h>
#include <stdbool.h>

bool is_digit_or_space(char * buffer) {
    while ( *buffer ) {
        if ( !isdigit(*buffer) && !isspace(*buffer) ) {
            return false;
        }
        ++buffer;
    }
    return true;
}

int main(void) {
    char good[] = "123 231 983 1234";
    char bad[] = "123 231 abc 1234";

    if ( is_digit_or_space(good) ) {
        printf("%s is OK\n", good);
    } else {
        printf("%s is not OK\n", good);
    }

    if ( is_digit_or_space(bad) ) {
        printf("%s is OK\n", bad);
    } else {
        printf("%s is not OK\n", bad);
    }

    return 0;
}

输出:
paul@local:~/src/c/scratch$ ./isdig
123 231 983 1234 is OK
123 231 abc 1234 is not OK
paul@local:~/src/c/scratch$

关于c - isdigit()包括检查空格,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19482941/

10-15 00:13