我是 C 的新手,如果这个问题很基础,我很抱歉。我试图了解 getchar()
函数的行为。
这里我有两个版本的代码:
第一个:
#include <stdio.h>
int main()
{
int c = getchar();
while (c != EOF)
{
putchar(c);
c = getchar();
printf(" hello\n");
}
}
当我输入 12 并按下返回键时,它会产生:
12
1 hello
2 hello
然后是另一个,我将 printf() 向上移动,输入相同的输入
#include <stdio.h>
int main()
{
int c = getchar();
while (c != EOF)
{
putchar(c);
printf(" hello\n");
c = getchar();
}
}
它产生:
12
1 hello
2 hello
hello
为什么这两个代码的工作方式不同,为什么第二个代码的末尾会出现额外的问候语。
最佳答案
请注意,您提供了 3 个字符的输入 - '1'、'2'
和一个换行符 (\n
)。
鉴于此,让我们跟踪您的程序在做什么:
第一个片段:
Read '1' ->
Print '1' ->
Read '2' ->
Print "hello\n" ->
Print '2' ->
Read '\n' ->
Print "hello\n" ->
Print '\n' ->
wait for more input
所以最后打印的是换行符。
第二个片段:
Read '1' ->
Print '1' ->
Print "hello\n" ->
Read '2' ->
Print '2' ->
Print "hello\n" ->
Read '\n' ->
Print '\n' ->
Print "hello\n" ->
wait for more input.
所以它首先打印换行符,然后打印"hello"
。
简而言之,两个片段执行相同次数的迭代,但在第一个片段中,最后一个 printf("hello\n")
被 getchar
阻塞,当没有更多的输入。第二个片段不是这种情况。
关于c - 为什么在使用 getchar() 的 while 循环中移动 printf() 会产生不同的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54487946/