***C语言中getchar()函数与缓冲区的关系***

本人之前关于getchar()函数一直似懂非懂,今天彻底搞懂了getchar()函数的原C语言中getchar()函数与缓冲区的关系,今天彻底搞懂了getchar()函数的原理,与大家分享一下。

getchar()函数的意思就是从键盘读取输入,并将其存储到缓冲区中。

它可以单独成一行:getchar();
不过这样没啥实际意义。

一般我们经常这样用:char ch; ch = getchar();
这样键盘输入的字符就被赋给了ch。

不过下面使用方法也很常见,也正是这种方法使我之前很迷糊。

***C语言中getchar()函数与缓冲区的关系***_第1张图片

如果打一个字符,再回车,就会出现下面这种情况,这种很好理解

***C语言中getchar()函数与缓冲区的关系***_第2张图片

但是也可以输入多个字符再按回车,就会出现下面这种,打印多次haha 这是怎么回事呢??!

***C语言中getchar()函数与缓冲区的关系***_第3张图片

我使用了断点调试。

***C语言中getchar()函数与缓冲区的关系***_第4张图片

***C语言中getchar()函数与缓冲区的关系***_第5张图片

***C语言中getchar()函数与缓冲区的关系***_第6张图片

***C语言中getchar()函数与缓冲区的关系***_第7张图片

结合书上看到的关于缓存区的知识,我得出了结论。
ch = getchar();这样一个语句并不是直接把键盘输入的字符赋给ch的,而是有一个过程:

1,先进行getchar()函数,此时键盘可以输入任意个字符,知道用户按下回车键,这时计算机会把用户之前输入的字符全部送进缓冲区(需要注意的是其中也包括回车字符)。缓冲区就是一个专门用来存储输入的临时存储区。

2,开始赋值,根据输入的顺序,缓冲区里的字符被一个一个赋给了ch,注意是一个一个,因为ch是字符变量,一次只能存一个字符。所以就会出现我在debug时的那种情况,ch先后被赋值为’a’, ‘b’, ‘c’, ‘\n’。 在我直接运行时,程序一次性打印了三行hahaha,其实是三次循环的结果,只是计算机运行速度很快,看起来像是一下打印出来的。

第一次发博客,请多指教。

就是这样,喵~

你可能感兴趣的:(C语言,C语言,编程,getchar,缓冲区)