检查一个字符串是否只有C中的数字?

我正在尝试编写一个简单的代码来检查字符串中是否只有数字。 到目前为止,它不起作用,任何帮助将不胜感激。

#include  #include  #include  int main() { char numbers[10]; int i, correctNum = 0; scanf("%s", numbers); for(i = 0 ; i <= numbers ; ++i) { if(isalpha(numbers[i])) { correctNum = 1; break; } } if(correctNum == 1) { printf("That number has a char in it. FIX IT.\n"); } else { printf("All numbers. Good.\n"); } return 0; } 

添加其他答案,您还可以使用strtol来确定字符串是否包含所有数字。 它基本上将字符串转换为整数,并省去任何非整数。 您可以阅读手册页以获取有关此function的更多信息,以及可以使用它进行的大量错误检查。

另外,你应该使用:

 scanf("%9s", numbers); 

代替:

 scanf("%s", numbers); 

避免缓冲区溢出。

这是一些示例代码:

 #include  #include  #define MAXNUM 10 #define BASE 10 int main(void) { char numbers[MAXNUM]; char *endptr; int number; printf("Enter string: "); scanf("%9s", numbers); number = strtol(numbers, &endptr, BASE); if (*endptr != '\0' || endptr == numbers) { printf("'%s' contains non-numbers\n", numbers); } else { printf("'%s' gives %d, which has all numbers\n", numbers, number); } return 0; } 

示例输入1:

 Enter string: 1234 

输出:

 '1234' gives 1234, which has all numbers 

示例输入2:

 Enter string: 1234hello 

输出:

 '1234hello' contains non-numbers 
 for(i = 0 ; i <= numbers ; ++i) //how is this supposed to work. 

运行循环从01小于输入的length

 for(i = 0 ; i < strlen(numbers) ; ++i) 
 #include  #include  int main() { char numbers[10]; int i, correctNum = 0; scanf("%s", numbers); for(i = 0 ; i < 10 ; i++) { if(numbers[i]<48||numbers[i]>57) { correctNum = 1; break; } } if(correctNum == 1) { printf("That number has a char in it. FIX IT.\n"); } else { printf("All numbers. Good.\n"); } return 0; } 

您可以考虑使用strspn

 #include  #include  int main(int argc, char* argv[]) { int i; for (i=1; i < argc; i++) { printf("%s %s\n", strlen(argv[i]) == strspn(argv[i], "0123456789") ? "digits" : "mixed", argv[i] ); } } 

全世界展示:

 $ ./try foo 123 ba23a 123.4 mixed foo digits 123 mixed ba23a mixed 123.4 

strspn返回第二个参数中出现的第一个参数的初始字符数。 超级简单的例子:

 strspn("abba", "a"); // == 1 strspn("abba", "b"); // == 0 strspn("abba", "ab"); // == 2 

你在for循环中有一个错误 – for(i = 0; i <= number; ++ i)

数字是指针,禁止与整数进行比较。 正确的代码 –

 #include  #include  #include  int main() { char numbers[10]; int i, correctNum = 0; scanf("%s", numbers); for(i = 0 ; i < strlen(numbers) ; ++i) { if(!(numbers[i]>='0' && numbers[i]<='9')) { correctNum = 1; break; } } if(correctNum == 1) { printf("That number has a char in it. FIX IT.\n"); } else { printf("All numbers. Good.\n"); } return 0; }