我理解这个程序如何显示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
答案 0 :(得分:0)
getchar
从标准输入流(stdin
)逐个字符地读取。问题是,在您按 Enter 之前,终端不会将键入的数据刷新到stdin
。当您按下它时,字符会发送到stdin
,getchar
读取每个字符,putchar
输出每个字符,直到EOF
。
是否正在使用缓冲区?
不......但是sort-of。
答案 1 :(得分:0)
是的,输入流中隐藏了一个缓冲区。准确地说是“行”缓冲区:字符存储在流中,直到输入换行符,然后发送到进程(此时您正在使用的阻塞读取功能 - 无论如何getchar()
,fgets()
,甚至read()
- 返回)。
在一个调用getchar()
的循环中,该函数将继续从流中返回字符,直到返回换行符字符为止,此时函数将再次阻塞,直到有另一个流中的换行符。