当我输入文本流时,c=getchar 如何使用缓冲区输出文本流?

How c=getchar is using buffer to out textstream when I input text stream?

我理解这个程序如何显示 getchar 如何使用缓冲区复制和粘贴多个字符

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

但是下面的这段代码如何

#include <stdio.h>
main()
{
    int c;

    c=getchar();
    while (c!= EOF)         // how does this program copy 12 and output 12. is a            
    {                           buffer being used? How so? 
       putchar(c);
        c=getchar();
    }
}

显示正在使用的缓冲区...我不明白,我不明白当我输入 12 时它如何能够打印 12。我是 C 的新手

getchar 从标准输入流 (stdin) 逐个字符地读取。问题是,在您按下 Enter 之前,终端不会将键入的数据刷新到 stdin 中。当你按下它时,字符被发送到 stdingetchar 读取每个字符并 putchar 输出每个字符,直到 EOF.

is a buffer being used?

没有....但是.

是的,有一个缓冲区,隐藏在输入流中。准确地说是 "line" 缓冲区:字符被存储在流中,直到输入 newline,然后发送到进程(此时无论您使用什么阻塞读取函数使用 -- getchar()fgets(),甚至 read() -- returns).

在调用getchar()的循环中,该函数将不断从流中返回字符,直到返回换行字符,此时该函数将再次阻塞直到信息流中还有一个 newline