关于C语言getchar()函数从键盘缓冲区读取顺序的问题

键盘缓冲区中有5个字符'c''h''i''n''a'和回车符,我在printf()函数中调用五次getchar()函数。为什么屏幕上显示的顺序是:回车符anihc?
调用6次

我们在给函数传多个参数的时候,编译器是从左到右将参数进行压栈的。以你的printf函数来说,把第一个getchar()入栈,然后是第二个。。。这样,最后一个getchar()就处于栈顶,然后执行的话就从栈顶开始取出参数,所以最后一个getchar()最先被执行,所以字符'c'被取走并按照顺序最后打印。这样明白吗?希望对你有所帮助追问

也就是说只是printf()函数中的getchar()的执行是倒序的,程序中位置第一的getchar()读取的是第一个字符'c',是吗?

追答

getchar()本身没有所谓的倒序执行这种说法,而是因为你把多个getchar作为printf函数的参数传递过去,而函数参数是以栈形式存储的,所以才出现最后的getchar被最先执行。而在你的输入缓冲区中,字符的顺序是“china\n”,因为最后的getchar被最先执行,所以是最右边的getchar把c读取了,然后被打印在最后

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-10-24
这说明了堆栈存储的特性,先进后出。
把printf后面五个分别标getchar1(),getchar2(),getchar3(),getchar4(),getchar5().
入栈会先把getchar1()压到最底下,像下面这样
getchar5()
getchar4()
getchar3()
getchar2()
getchar1()
这样的话有点像叠被子,先叠的被子在最下面,最后叠的在最上面。
但是最后出栈的时候是从最上面开始依次读取。睡觉的时候把上面的被子拿下来铺到床上。
第2个回答  2014-10-24
这个正好说明,getchar()在这个实验,堆栈是倒序排列存储数据的。追问

也就是说不管我用什么函数,都会先读取回车符吗?

相似回答