使用getchar读取整数输入时出现意外的putchar输出

时间:2011-09-19 19:56:51

标签: c character-encoding

我正在完成这个计划:

#include<stdio.h>

main()
{
 int c;

 c = getchar();

 while(c != EOF) {
   putchar(c);
   c = getchar();
  }
}

由于变量c是整数,它应该存储给定输入的整数等价值。输出显示'a'打印为'a''b'打印为'b''c'打印为'c'但是,当我输入值65时},输出也是65!因此,值65和char 'a'

的存储格式必须存在一些差异

两个值如何相互区别?

3 个答案:

答案 0 :(得分:2)

这是因为输入65被视为两个不同的字符输入,程序正在按顺序打印它们。

当您输入6时,程序会立即读取它并检查它是否为EOF,因此它会将其打印到控制台。然后,当您输入5时,它再次将其作为输入。由于这也不是EOF,您的程序会再次打印它。

所以你输入两个字符,这个程序正确地将它打印到控制台,就像它应该做的那样。除此之外,没有歧视。 a的等价整数等于65,因此如果您打印这样的字符,它将打印65 -

 char c = 'a';
 printf("%d", c);    // will print 65

这将打印a -

int i = 65;
printf("%c", i);    // will print a

答案 1 :(得分:1)

您的代码完全按照书面形式执行,但是,您对程序输入的理解存在困惑。

当您输入65时,它被解释为两个类型字符,即'6''5'。正如您所指出的,每次在while循环中调用putchar(c)时,都会向控制台回显。

答案 2 :(得分:1)

不,65和'a'的存储没有区别。将这些中的任何一个分配给变量会产生完全相同的结果。差异仅与char的输入和输出有关。例如。 printf(“%c”,65)产生'a',因为它是printf()定义的一部分。对于您提到的其他两个函数putchar()getchar()也是如此。