仅将整数扫描到数组中

时间:2018-04-06 12:16:14

标签: c loops scanf do-while digit

作为我所拥有的作业的一部分,我需要使用<stdio.h>库从用户那里获得一个数字。

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

但该程序将从用户那里得到字符和其他东西。

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

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

看到你的逻辑,你似乎对大于9(多位数字)的数字和小于0的数字感兴趣(有符号数字/整数)。

我建议不要使用scanf更好地使用getchar这样的内容,而不是一次只返回一个字符。

使用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

答案 1 :(得分:0)

您可以使用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;
}