I\'m trying to write a simple code to check if a string only has numbers in it. So far it\'s not working, any help would be appreciated.
#include
Adding to the others 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 leaves out any non-integers. You can read the man page for more information on this function, and the extensive error checking you can do with it.
Also, you should use:
scanf("%9s", numbers);
Instead of:
scanf("%s", numbers);
To avoid buffer overflow.
Here is some example 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;
}
Example input 1:
Enter string: 1234
Output:
'1234' gives 1234, which has all numbers
Example input 2:
Enter string: 1234hello
Output:
'1234hello' contains non-numbers
You have an error in the for loop - for(i = 0 ; i <= numbers ; ++i)
numbers is pointer and the comparison of it with integer is forbidden. Correct Code -
#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;
}
You might consider using 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]
);
}
}
Demoed:
$ ./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 appear in the second argument. Super simple examples:
strspn("abba", "a"); // == 1
strspn("abba", "b"); // == 0
strspn("abba", "ab"); // == 2
for(i = 0 ; i <= numbers ; ++i) //how is this supposed to work.
Run the loop from 0
to 1
less than the length
of the input.
for(i = 0 ; i < strlen(numbers) ; ++i)
#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;
}