仅将整数扫描到数组中

scanning an integer ONLY into an array

作为我的任务的一部分,我需要仅使用 <stdio.h> 库从用户那里获取一个数字。

do {
  scanf("%d",&num);
} while (num>9 || num<0);

但是程序也会从用户那里得到字符和其他东西。

有什么建议吗?

解决此问题的一种方法是获取扫描的 ASCII 值 "digit" 并确保它位于 ASCII 值 0X30 和 0X39(或 48 和 57)之间。

看你的逻辑,你好像对大于9的数(多位数)和小于0的数(有符号numbers/integers)感兴趣。

我建议不要使用 scanf,最好使用类似 getchar 的东西,这样一次 return 一个字符。

使用 getchar 扫描多位数字的简单方法可以是:

int getNumber()
{
    int sign = 1;
    int i = 0;
    int ch;
    ch = getchar();
    if((ch == '-') || (ch == '+')) //check sign
    {
        if(ch == '-') sign = -1;
    }
    else  
    {
        if (ch > '9' || ch < '0')
            return NULL; // Your requirement - it's a non number
        i *= 10;
        i += ch - '0';
    }
    while ((ch = getchar()) != '\n') //get remaining chars
    {
        if (ch > '9' || ch < '0')
            return NULL; // Your requirement - it's a non number
        i *= 10;
        i += ch - '0';
    }
    i *= sign; //change sign
    return i;
}

您可以调用此函数来代替 scanf

您可以使用 getchar() 从 stdin 读取单个字符,然后将其与 0 和 9(单个字符的上限和下限)的 ASCII 值进行比较。作为整数的数字等于字符代码减去0的字符代码。

#include <stdio.h>

int main(void) {
    char c;

    while((c = getchar()) >= '0' && c <= '9')
        printf("Digit is: %d\n", c - '0');
    return 0;
}