仅将整数扫描到数组中
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;
}
作为我的任务的一部分,我需要仅使用 <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;
}