我想写一个代码来获取一个数字未知的数字(意味着它可以是100和1000000)。我想过使用getchar
并编写了以下代码:
#include <stdio.h>
int main()
{
char nextdigit;
int finalnumber=0;
nextdigit=getchar();
while(nextdigit!='\n')
{
finalnumber=finalnumer*10+(int)nextdigit;
nextdigit=getchar();
}
printf("%d",finalnumber);
}
但似乎当我输入例如3
时,它打印51(可能是3
的ascii值)并且实际上不允许我输入数字。我做错了什么?
答案 0 :(得分:1)
是的,51
是'3'
的{{3}}值。有一种简单的方法可以将字符ASCII值转换为整数值,只需减去'0'
的ASCII值:
finalnumber = finalnumer * 10 + nextdigit - '0';
另外,将char
变量与getchar
一起使用时要小心,因为getchar
被声明为返回int
。您可能还想检查返回的EOF
(这就是您需要int
变量的原因)。
答案 1 :(得分:1)
getchar()
返回int
。将nextdigit
声明为int
。
int nextdigit;
并从表达式48
'0'
(finalnumber = finalnumber*10 + nextdigit;
的ascii值)
finalnumber = finalnumber*10 + nextdigit - '0';
答案 2 :(得分:0)
您将获得ASCII,因此删除:0x30('0')
您可能需要对' - '执行某些操作(因为您输入的是int),否则请使用unsigned int。
答案 3 :(得分:0)
您可以大幅简化代码:
#include <stdio.h>
int main(void) {
int number;
printf("Enter an integer:\n");
scanf("%d", &number);
printf("Number was: %d\n", number);
return 0;
}
答案 4 :(得分:0)
取决于输入数量的大小
short int - 32768 ~ 32767 scanf("%d", &number);
unsigned int 0 ~ 2^32 -1 scanf("%u", &number);
int - 2^31 ~ 2^31 - 1 scanf("%d", &number);
int 64 - 2^63 ~ 2^63 - 1 scanf("%I64d", &number);
如果您的输入大于2 ^ 63 - 1,您应该尝试使用char作为输入 char类型的每个输入字符都是其ASCII值
char nextdigit;
int finalnumber=0;
nextdigit=getchar();
finalnumber=nextdigit-'0';