关于getchar()

描述:百度百科中说“用户输入的字符被存放在键盘缓冲区中.直到用户按回车为止(回车字符也放在缓冲区中). 当用户键入回车之后,getchar才开始从stdin流中每次读入一个字符。”
问题:1.字符不是在键盘缓冲区吗,getchar怎么不从缓冲区而是从stdin流中读入字符?
2.是不是缓冲区和stdin流是2个不同的东西,那么缓冲区的字符又是怎么到stdin流中去的?

百科说的不够准确,应该根据不同的情况来判断,加入你用无缓冲的IO写的话,就没有缓冲区这么一说了。
关于你的两个问题,前提是在用有缓冲的命令行交互,并且是使用的有缓冲的IO, 。

我说下我的理解:
输入的字符先放着键盘的缓冲区,当你摁下回车的时候,stdin接受键盘缓冲区的数据,形成一个流数据,然后供其他调用来使用。

1、getChar()是一个宏,这个宏就是getc(stdin),所以getc从stdin里面去取字符。

2、我理解的键盘缓冲区和stdin流不是一个东西,当然,你可以认为stdin流是某种缓冲区。但他不是键盘缓冲区。我觉得stdin像一个文件,linux里面stdin,stdout都是特殊的文件描述符。
我觉得缓冲区的字符通过基础的IO(内核调用或者其他什么调用,这个我真心不清楚,linux内核应该有相关实现),写进stdin中。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-12-23
他们两个应该不是同一个东西。你可以分开查一下键盘缓冲区和stdin。
相似回答
大家正在搜