【问题标题】:Unexpected putchar output when reading integer input with getchar使用 getchar 读取整数输入时出现意外的 putchar 输出
【发布时间】:2011-09-19 19:56:51
【问题描述】:

我正在通过这个程序:

#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'的存储格式肯定是有区别的

如何区分这两个值?

【问题讨论】:

  • 是的,当您按“6”和“5”时,输出将是“65”。如果要查看整数值,请使用 printf("%d", c);
  • 尝试在putchar(c) 之后添加putchar('\n') 以获得完整图片

标签: c character-encoding


【解决方案1】:

这是因为输入 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

【讨论】:

    【解决方案2】:

    您的代码完全按照编写的方式执行,但是,混淆在于您对程序输入的理解。

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2021-09-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-25
        • 2020-05-16
        相关资源
        最近更新 更多