【问题标题】:C Simple Code Involving getchar() and putchar() Unexpected Output涉及 getchar() 和 putchar() 的 C 简单代码意外输出
【发布时间】:2020-12-31 00:00:21
【问题描述】:

当我在学习书中的一个例子时,

#include <stdio.h>

main()
{
        int c;

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

我认为先读取字符然后打印它会更有意义,所以切换 putchar 和 getchar

c = getchar();
putchar(c);

现在当我运行它时,putchar 的第一个输出缺少 c 的第一个字符会发生什么?这是输出:

kingvon@KingVon:~/Desktop/C$ ./a.out
first letter is missing?
irst letter is missing?
but now it is not 
but now it is not

这很有趣,为什么会这样?

【问题讨论】:

  • 你需要一个do{}while(); 才能做到这一点
  • 标准成语让它更清晰一点:while( (c = getchar()) != EOF ){ putchar(c); }如果你愿意,你可以写成while( c = getchar(), c != EOF ){ putchar(c); }
  • 您建议的更改的另一个问题是您最终会致电putchar(EOF)

标签: c getchar putchar


【解决方案1】:

因为你在循环之前得到了一个字符。这意味着 c 等于第一个字符,但在循环中它会获取之后的每个字符。所以,

Get: f
Start the loop
Get: i
Print: i
And so on

【讨论】:

    【解决方案2】:

    问题是现在您没有打印循环前使用getchar() 读取的字符,因此您不会打印第一个字符。

    如果要先执行getchar(),请将其放入while() 条件中。

    #include <stdio.h>
    
    main()
    {
        int c;
    
        while ((c = getchar()) != EOF) {   
            putchar(c)
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2021-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-22
      • 1970-01-01
      相关资源
      最近更新 更多