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

时间:2015-06-23 06:07:42

标签: c getchar

我理解这个程序如何显示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

2 个答案:

答案 0 :(得分:0)

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

  

是否正在使用缓冲区?

不......但是sort-of

答案 1 :(得分:0)

是的,输入流中隐藏了一个缓冲区。准确地说是“行”缓冲区:字符存储在流中,直到输入换行符,然后发送到进程(此时您正在使用的阻塞读取功能 - 无论如何getchar()fgets(),甚至read() - 返回)。

在一个调用getchar()的循环中,该函数将继续从流中返回字符,直到返回换行符字符为止,此时函数将再次阻塞,直到有另一个流中的换行符