涉及 getchar() 和 putchar() 意外输出的 C 简单代码

C Simple Code Involving getchar() and putchar() Unexpected Output

因为我在学习书中的一个例子,

#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

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

问题是现在你不打印你在循环之前用 getchar() 读取的字符,所以你不打印第一个字符。

如果你想先做getchar(),把它放到while()条件中。

#include <stdio.h>

main()
{
    int c;

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

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

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