使用getchar()获取未知长度的int

时间:2013-11-18 13:46:06

标签: c int

我想写一个代码来获取一个数字未知的数字(意味着它可以是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值)并且实际上不允许我输入数字。我做错了什么?

5 个答案:

答案 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';