关于getchar()/ putchar()

时间:2018-03-24 18:08:24

标签: c

在此代码中:

 #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

2 个答案:

答案 0 :(得分:1)

这是因为循环条件。您将继续循环直到收到EOF。键入“hello”时,它的工作方式与预期完全相同,只是STDIN在缓冲区中有更多字符,而且没有一个是EOF。程序打印出“h”,然后打印换行符,然后返回检查循环条件。 EOF尚未找到,因此它从STDIN(您已经提供)中获取下一个字符并重复循环。

如果删除循环,它只会打印一个字符。

答案 1 :(得分:1)

来自终端的输入通常是缓冲。这意味着它被保存在内存中,等待程序读取它。

该缓冲区由多个软件执行。在终端窗口中实际读取输入的软件通常会累积您键入的字符,直到您按Enter或按某些其他键或结束当前输入的组合为止。然后,已读取的行可供您的程序使用。

在程序内部,getchar所属的C标准库读取已发送给它的数据并将其保存在自己的缓冲区中。 getchar例程从此缓冲区中读取下一个字符。 (如果getchar想要另一个字符时缓冲区为空,getchar将阻塞,等待新数据从终端软件到达。)