在此代码中:
#include<stdio.h>
int main()
{
int i,p=0;
while(i!=EOF)
{
i=getchar();
putchar(i);
printf("\n");
}
return 0;
}当我一次输入hello时,输出是h,然后是下一行e,依此类推。但是,当打印h之前,在打印e之前,为什么getchar()不像第一次那样暂停接收我的输入呢?
getchar()返回从stdin成功读取的任何字符或一些错误,因此哪个函数要求终端输入,然后将其发送给stdin。
发布于 2018-03-24 18:35:56
来自终端的输入通常被缓冲。这意味着它保存在内存中,等待您的程序读取它。
此缓冲区由多个软件执行。在终端窗口中实际读取输入的软件通常会积累您输入的字符,直到您按enter或按下结束当前输入的某些其他键或组合。然后,已读取的行可供您的程序使用。
在您的程序中,C标准库( getchar是其中的一部分)读取发送给它的数据,并将其保存在自己的缓冲区中。getchar例程从这个缓冲区读取下一个字符。(当getchar需要另一个字符时,如果缓冲区为空,getchar将阻塞,等待终端软件中的新数据。)
发布于 2018-03-24 18:20:14
这是因为循环的情况。您将继续循环,直到收到EOF。当您键入"hello“时,它的工作方式与您预期的完全相同,除非STDIN在缓冲区中有更多的字符,而且没有一个是EOF。程序输出"h",然后是换行符,然后返回检查循环条件。EOF尚未找到,因此它将从STDIN (您已经提供)获得下一个字符并重复循环。
如果删除循环,它将只打印一个字符。
https://stackoverflow.com/questions/49468124
复制相似问题