C语言笔记:fflush(stdin)和fflush(stdout)

本文详细介绍了scanf函数的输入处理规则,包括遇到空格、回车、非法输入等情况如何结束数据输入,并指出可能出现的键盘缓冲区残余信息问题。接着,重点解析了fflush(stdin)函数,它用于清空标准输入缓冲区,常用于处理非法输入导致的缓冲区残留。最后,对比了fflush(stdout)和flush(stdin)在刷新缓冲区上的区别,前者用于输出缓冲区,后者则用于输入缓冲区。了解这些细节对于编写高效且健壮的C语言程序至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、scanf()接收数据详解

scanf()函数接收输入数据时,遇以下情况结束一个数据的输入:
(详见:https://blog.csdn.net/21aspnet/article/details/174326
① 遇空格、“回车”、“跳格”键。
② 遇宽度结束。
③ 遇非法输入。
键盘缓冲区就可能有残余信息问题。
scanf()函数应该只是扫描stdin流,这个残存信息是在stdin中的,解决这个问题就需要在scanf()函数之后加个fflush(stdin)。

二、fflush(stdin)详解

1、fflush(stdin) 是清空输入缓冲区的意思。stdin就是标准输入 std即standard(标准),in即input(输入),合起来就是标准输入。 用来清除标准输入设备的缓存(一般就是指键盘输入到缓冲区里的东西)。

2、在清除文件缓冲区时使用,文件以写方式打开时将缓冲区内容写入文件。

3、比如你写个程序只允许输入数字,然后就可以循环,如果你这时输入了一个字符,这时一个字符就是非法得了,一直保留在缓存空间里,如果不处理掉可能会照成死循环…这时你就可以用这个代码清除缓存。

三、fflush(stdout)与flush(stdin)比较

  • flush(stdin)刷新标准输入缓冲区,把输入缓冲区里的东西丢弃。
  • fflush(stdout)刷新标准输出缓冲区,把输出缓冲区里的东西打印到标准输出设备上。

参考资料:
1.https://zhidao.baidu.com/question/11704430.html
2.https://zhidao.baidu.com/question/480633494.html

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值