首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >澄清getchar()/putchar()的功能

澄清getchar()/putchar()的功能
EN

Stack Overflow用户
提问于 2018-03-24 18:08:23
回答 2查看 50关注 0票数 0

在此代码中:

代码语言:javascript
复制
 #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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-03-24 18:35:56

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

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

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

票数 1
EN

Stack Overflow用户

发布于 2018-03-24 18:20:14

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49468124

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档