关于getchar()和putchar()函数的问题-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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

2016-06-07 19:44:46 1748 1

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

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

取消 提交回答
全部回答(1)
  • a123456678
    2019-07-17 19:30:52

    确实跟缓冲区有关, getch每次调用,从标准输入缓冲区中读入1个字符,但如果缓冲区中没有数据,则会阻塞程序,等待直到缓冲区里有数据。

    那么什么时候有数据呢?

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

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

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

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

    第三个程序,翻译一下

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

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

    0 0
相关问答

1

回答

请问,这里哪里出现逻辑错误了? var getRawBody = require('ra

2022-08-10 16:41:29 244浏览量 回答数 1

1

回答

Throwable类中public Throwable getCause()是什么意思?

2021-11-17 16:43:36 79浏览量 回答数 1

1

回答

hibernate4关于getCurrentSession()的事务配置问题:报错

2020-06-14 06:35:46 241浏览量 回答数 1

1

回答

hibernate4关于getCurrentSession()的事务配置问题-服务报错

2020-05-31 12:16:09 240浏览量 回答数 1

1

回答

vuex怎么知道state是通过mutation修改还是外部直接修改的?

2020-05-23 20:56:24 822浏览量 回答数 1

0

回答

Go-SDK之如何实现授权访问?

2017-10-19 14:33:35 1935浏览量 回答数 0

1

回答

关于input标签的focus事件疑问

2016-06-21 13:01:57 1984浏览量 回答数 1

1

回答

Leetcode Trie Tree实现问题

2016-05-30 20:12:26 1874浏览量 回答数 1

1

回答

关于gcc安装问题,求教

2016-03-19 17:49:02 1931浏览量 回答数 1

1

回答

关于C++函数返回字符串char*的问题

2016-03-05 14:50:14 3090浏览量 回答数 1
+关注
0
文章
14879
问答
问答排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载