C语言中检查字符串是否只有数字?

Syc*_*ins 1 c arrays char isalpha

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

#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;
}
Run Code Online (Sandbox Code Playgroud)

Roa*_*ner 6

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

另外,您应该使用:

scanf("%9s", numbers);
Run Code Online (Sandbox Code Playgroud)

代替:

scanf("%s", numbers);
Run Code Online (Sandbox Code Playgroud)

以避免缓冲区溢出。

这是一些示例代码:

#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;
}
Run Code Online (Sandbox Code Playgroud)

输入示例 1:

Enter string: 1234
Run Code Online (Sandbox Code Playgroud)

输出:

'1234' gives 1234, which has all numbers
Run Code Online (Sandbox Code Playgroud)

输入示例 2:

Enter string: 1234hello
Run Code Online (Sandbox Code Playgroud)

输出:

'1234hello' contains non-numbers
Run Code Online (Sandbox Code Playgroud)