Check if a string has only numbers in C?

2019-07-25 01:59发布

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 <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;
}

5条回答
贪生不怕死
2楼-- · 2019-07-25 02:48

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
查看更多
唯我独甜
3楼-- · 2019-07-25 02:54
#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;
}
查看更多
霸刀☆藐视天下
4楼-- · 2019-07-25 02:54

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;
 }
查看更多
放我归山
5楼-- · 2019-07-25 02:56

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
查看更多
再贱就再见
6楼-- · 2019-07-25 02:59
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)
查看更多
登录 后发表回答