gpt4 book ai didi

c - 为什么在使用 getchar() 的 while 循环中移动 printf() 会产生不同的结果?

转载 作者:太空宇宙 更新时间:2023-11-04 01:45:32 27 4
gpt4 key购买 nike

我是 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com