我正在做一些IO,其中一行是number number
,但是当我使用时,
if(isdigit(buffer) > 0) { ... }
它失败了,我相信这是因为每个号码之间都有一个空格。使用isdigit()时有没有办法不包含空格?或者有替代方案吗?感谢。
答案 0 :(得分:2)
正如评论中所提到的,isdigit()
和朋友一起处理字符,而不是字符串。这样的事情会做你想做的事情:
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$