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

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

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

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

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

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

在这里插入图片描述

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

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

在这里插入图片描述

我使用了断点调试。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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

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

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

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

就是这样,喵~

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值