涉及 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
因为我在学习书中的一个例子,
#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