问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
你好,欢迎来到懂视!登录注册
当前位置: 首页 - 正文

清空输入缓冲区是什么意思 有什么用

发布网友 发布时间:2022-04-29 21:41

我来回答

1个回答

热心网友 时间:2022-06-23 12:05

/*
1)给出下面这个测试程序。

2)我们约定输入数据为:

a(enter 键)
b(enter 键)
c(enter 键)
d(enter 键)

*******************************
当你 fflush(stdin); 被注释掉时 ,输出结果是:
a --输入
a --对应输出
我是一个回车 --对应输出
b --输入
b --对应输出
我是一个回车 --对应输出
c
c
我是一个回车
d
d
我是一个回车

*******************************
当你 fflush(stdin); 没有被注释掉时 ,输出结果是:
a --输入
a --对应输出
b --输入
b --对应输出
c
c
d
d
*******************************

3)说明
fflush 函数就是清空【输入缓冲区】的操作。
比较 fflush(stdin); 被注释掉时和 fflush(stdin); 没有被注释掉时的效果,
可以看到区别是 "我是一个回车" 这句输出。
"我是一个回车"其实对应于'\n',为了更加直观看到'\n'因此用一句话代替它。

为什么会有这个区别呢?
当我们输入 "a(enter 键)" 是,【键盘输入缓冲区】里面其实保存了两个【按键A】【按键enter】
的【键值】。另外有个,当前是指向 【按键A】的。

调用 scanf 函数是,本质的操作就是从 【键盘输入缓冲区】里面读取数据流。
调用 scanf("%c",&c) 是从【键盘输入缓冲区】中【读取一个字符】(这里是当前指向的【按键A】),
同时【键盘输入缓冲区的指针】向后移动,【按键enter】。

如果接下来没有【清空将键盘输入缓冲区】,下一次调用 scanf("%c",&c) 时,
从【键盘输入缓冲区的指针】当前指向的位置【读取一个字符】,读到的将是 【按键enter】,
同时【键盘输入缓冲区的指针】向后移动,指向了【键盘输入缓冲区】的末尾。

如果接下来【清空将键盘输入缓冲区】,则【键盘输入缓冲区的指针】将指向【键盘输入缓冲区】的末尾。
下一次调用 scanf("%c",&c) 时,【清空将键盘输入缓冲区】没有数据了,
因此会重新等待用户从键盘输入。

总结:
没有 fflush(stdin); 时,a(回车) 相当于输入两个字符
有 fflush(stdin); 时,a(回车) 只读取第一个字符

*/
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
char c;
while(1)
{
scanf("%c",&c);
if(c=='\n')
printf("我是一个回车\n");
else
printf("%c\n",c);
fflush(stdin);
}
return 0;
}
声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
收到别单位给的承兑汇票 我单位在给别的单位 这笔业务应该怎么做啊? 荔枝什么生肖 均衡器怎样调成重低音 电脑eq设置低音电脑EQ均衡器怎么设置达到最佳音效 第一排是什么单词 人生中的黑暗乐章——Agust 乐评 Sigur Ros乐队简介 ...在这部影片里面名字叫Agust还是什么的、求名字 请大大们给个英文名 大叶芹叶子可以吃吗 机箱风扇线正负极线是什么颜色的 探岳280有220伏电源接口吗? 踏板摩托车哪个品牌好?豪爵铃木,建设雅马哈,五羊本田这几个品牌怎么选? 标致“贵族”通勤踏板,单缸水冷四冲程,功率9.3kw配abs,2.28万 途岳的点烟器拔出来为什么是空的 大众探岳室内天花扶手怎样拆 宁波市瞻岐人饭店(万兴路店)怎么样?有什么好玩的地方? c语言清除缓冲区的数据? 虾潺能放冷冻室吗 scanf()需要清输入缓冲区问题 C语言中清除内存缓冲区的函数是什么?? C语言中关于scanf语句在循环中发现一个不明白的地方 C语言中如何清空输入输出缓冲区 是否每次使用scanf函数后都必须清空键盘缓冲区 一张身份证可以实名注册多少QQ? 冰箱冷藏室哪一层最快速的冰冻食物 实名信息绑定了5个帐号如何解除多余的帐号?身份证实名了五个QQ想注销,那些QQ都登录不了,有没有强 王者荣耀实名认证时,一张成年人的身份证可以绑多个王者QQ号吗? 腾讯健康系统未成年身份信息只能绑定在一个账号上,我有两个qq号,假设一个叫A号,一个叫B号,我的未_百度问一问 武汉有没有一个姓邓的中医治癌症,癌症晚期都能治好 烟台地区一汽大众探岳优惠4万元 高颜值运动踏板,配水冷引擎,12.6匹马力,操控性好,15500元 大众朗逸车点烟器如何使用 关于有意义的社会实践活动的日记3篇 初中日记 大众朗逸点烟器没有电怎么办? 法系特有的倔强!150cc通勤踏板,虽然亮点颇多,但这价格…… c语言,scanf函数,在输入一个数据时,如何使数据进去缓冲区? 大众桑塔纳点烟器怎么用,桑塔纳点烟器保险丝位置? 写三篇社会实践体会,最少400字 大众朗行点烟器电压是多少 为啥scanf清除键盘缓冲区失败 安娜苏魔镜香水价格 宁波话里有种鱼叫haodie 学名叫什么? scanf(&quot;%d%d&quot;,&a,&b)与scanf(&quot;%d,%d&quot;,&a,&b)的区别!! 三篇小学生社会实践日记300字 c语言中用了scanf语句就输不出结果把scanf删掉就能出结果是为啥 安室奈美惠和滨崎步在日本谁更红? 急求社会实践日记??? 还是我,为什么这个没有清空缓冲区,但是scanf语句没有被跳过呢? 售价2.38w,标致发布姜戈CLUB限量版,提供丰富增值项目
  • 焦点

最新推荐

猜你喜欢

热门推荐