开发者社区> 问答> 正文

关于getchar()和putchar()函数的问题

screenshot
screenshot
第一张图为什么只输出了一个a呢?而第二张就全输出来了?第三个为什么输出的有是#?(不应该是W吗?)

查了一下好像是和缓冲区有关,但还是不太能理解,而且还说getchar返回的是int类型呢?这又是从哪里体现的呢?

展开
收起
a123456678 2016-06-07 19:44:46 2218 0
1 条回答
写回答
取消 提交回答
  • 确实跟缓冲区有关, getch每次调用,从标准输入缓冲区中读入1个字符,但如果缓冲区中没有数据,则会阻塞程序,等待直到缓冲区里有数据。

    那么什么时候有数据呢?

    -- 当你按回车的时候,之前键入的所有字符,包含回车自身,一并被送入输入缓冲区

    所以,当缓冲区为空时,无论你输入多少个字符,只要不按回车,getch()函数会一直等在那里。

    第一个程序,输入asxsas回车后,getch()获取到第一个字符a,之后的字符还在缓冲区内,当程序退出时,缓冲区销毁,里面的数据也随之消失。

    第二个程序可以自己体会下。

    第三个程序,翻译一下

    每当( (从缓冲区读一个字符) 不等于 '#' ) 执行 { 啥也不干,继续循环 }
    只有当读到#的时候,才因不满足循环条件而跳出,继续执行下面的putchar,当然 此时打印出的就是 #

    getchar返回int类型这个是API里定义的规范,但是你可以将它赋值给一个char类型的变量,这里会自动做int -> char的隐式类型转换,这个转换,会丢失高位字节,但是对于getch()返回的数据来说,他的范围是0-127,高位字节永远都是0,丢了也无所谓

    2019-07-17 19:30:52
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载