作为我所拥有的作业的一部分,我需要使用<stdio.h>
库从用户那里获得一个数字。
do {
scanf("%d",&num);
} while (num>9 || num<0);
但该程序将从用户那里得到字符和其他东西。
有什么建议吗?
答案 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;
}