Check if a string has only a number in C?

I am trying to write simple code to check if a string contains only numbers. While this does not work, any help would be appreciated.

#include <stdio.h> #include <string.h> #include <ctype.h> 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; } 
+1
source share
5 answers

Adding to other answers, you can also use strtol to determine if a string has all numbers or not. It basically converts the string to an integer and excludes any non-integer numbers. You can read the man page for more information on this feature and the extensive error checking you can do with it.

In addition, you should use:

 scanf("%9s", numbers); 

Instead:

 scanf("%s", numbers); 

To avoid buffer overflow.

Here is a sample code:

 #include <stdio.h> #include <stdlib.h> #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; } 

Input Example 1:

 Enter string: 1234 

Output:

 '1234' gives 1234, which has all numbers 

Input Example 2:

 Enter string: 1234hello 

Output:

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

Run a loop from 0 to 1 less than the length input.

 for(i = 0 ; i < strlen(numbers) ; ++i) 
0
source
 #include <stdio.h> #include <string.h> 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; } 
0
source

You can use strspn :

 #include <stdio.h> #include <string.h> 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] ); } } 

intended:

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

strspn returns the initial number of characters from the first argument that appears in the second argument. Super simple examples:

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

You have an error in the for loop - for (i = 0; i <= numbers; ++ i)

numbers is a pointer, and comparing it with an integer is prohibited. The correct code is

 #include <stdio.h> #include <string.h> #include <ctype.h> 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; } 
-1
source

All Articles