在C语言中使用fflush(stdin)
fflush() 通常仅用于输出流。它的目的是清除(或刷新)输出buffer,并将缓冲的数据移动到控制台(在stdout的情况下)或磁盘(在文件输出流的情况下)。下面是它的语法。
fflush(FILE *ostream);
ostream 指向一个输出流或一个更新流,其中最近的操作不是输入。fflush函数会导致将该流的任何未写入数据传递到主机环境,并写入该文件;否则,行为未定义。
我们可以将它用于像 stdin 这样的输入流吗?
根据 C 标准,使用 fflush(stdin) 是未定义的行为。然而,一些编译器如 Microsoft Visual Studio 允许它。在这些编译器中如何使用它? 在获取带空格的输入字符串时,缓冲区不会为下一个输入清除,而是将前一个视为相同输入。为了解决这个问题,使用 fflush(stdin) 清除流/缓冲区。
// C program to illustrate situation
// where flush(stdin) is required only
// in certain compilers.
#include <stdio.h>
#include <stdlib.h>
int main()
{char str[20];int i;for (i=0; i<2; i++){scanf("%[^\n]s", str);printf("%s\n", str);// fflush(stdin);}return 0;
}
输入:
geeks
geeksforgeeks
输出:
geeks
geeks
上面的代码只接受一个输入,并为第二个输入提供相同的结果。原因是因为字符串已经存储在缓冲区中,即流尚未清除,因为它希望字符串带有空格或新行。因此,使用 fflush(stdin) 来处理这种情况。
// C program to illustrate flush(stdin)
// This program works as expected only
// in certain compilers like Microsoft
// visual studio.
#include <stdio.h>
#include <stdlib.h>
int main()
{char str[20];int i;for (i = 0; i<2; i++){scanf("%[^\n]s", str);printf("%s\n", str);// used to clear the buffer// and accept the next stringfflush(stdin);}return 0;
}
输入:
geeks
geeksforgeeks
输出:
geeks
geeksforgeeks
说明:
scanf("%[^\n]s", str); 等价于 gets(str);
%[^\n] 可读取带有空格的字符串,以换行符结尾。具体可参考 scanf(“%[^\n]s”, str) Vs gets(str)。
使用fflush(stdin)好吗?
虽然在“scanf()”语句之后使用“fflush(stdin)”也会清除某些编译器中的输入缓冲区,但不建议使用它,因为这是语言标准未定义的行为。在C和C++中,我们有不同的方法来清除在这个帖子中讨论的缓冲区。
参考文档
[1]Sahil Chhabra.Use of fflush(stdin) in C[EB/OL].https://www.geeksforgeeks.org/use-fflushstdin-c/,2018-12-13.
在C语言中使用fflush(stdin)相关推荐
- c语言中标准输入文件 stdin 是指,C语言中,认为键盘是标准输入文件stdin
不红旗",语言中牌的国制工匠造中造世界品精神了打体现. 年度个人管理总额结汇业务实行,为键文件年等值(即每人每. 指对账的原则,标准不相应予符的反映,果的真实信息会计核算和业必须务处对账结果 ...
- c语言中fflushstdin作用,C语言fflush(stdin)函数是什么意思,在什么情况下用它
C语言fflush(stdin)函数是什么意思,在什么情况下用它 來源:互聯網 2009-04-22 18:49:31 評論 分類: 電腦/網絡 >> 程序設計 >> 其他 ...
- fflush(stdin)和fflush(stdout)和rewind(stdin)的区别和作用
理解:fflush(stdin)和fflush(stdout)和rewind(stdin) 小结论(多谢网友zhao4zhong1为我解答疑难): 1.在每个最后不带\n的printf后面加fflus ...
- c语言怎么清空标准输入缓冲区,C语言中如何清空输入输出缓冲区
C语言中如何清空输入输出缓冲区 答案:5 信息版本:手机版 解决时间 2019-10-06 09:40 已解决 2019-10-05 13:54 C语言中如何清空输入输出缓冲区 最佳答案 2019- ...
- 为什么fflush(stdin)用了并不能清除缓冲区
为什么fflush(stdin)用了并不能清除缓冲区 很多人在教材上都看到fflush(stdin)这个函数的使用,教材给出的解释是清除缓冲区,可是一些动手实践过代码的小伙伴发现,fflush(std ...
- C语言中几个字符串输出
printf 功能 c语言中产生格式化输出的函数(定义在 stdio.h 中).向终端输出(显示器等) 用法 int printf(const char *format,[argument]); fo ...
- c语言怎么同时输入两个字符,解决C语言中使用scanf连续输入两个字符类型的问题...
昨天用C编程,遇到一个关于scanf的细节问题,假如运行如下程序: #include int main() { char ch1,ch2; printf("Input for ch1:/n& ...
- C/C++ 误区:fflush(stdin)
C/C++ 误区:fflush(stdin) 注:本文转自http://blog.chinaunix.net/u/32196/showart.php?id=250809 并非原创,收入本博,聊作记录. ...
- C语言中的输入输出函数
----------------------------- //键盘缓存区(按enter送入)==>输入缓存区 ==>scanf ----------------------------- ...
- IOS笔记-C语言中的指针与数组
1.指针与数组 1)指针与一维数组 i.数组指针(指向数组元素的指针) 类型 *指针变量名: 指针定义完成后要初始化(不想让指向任何内容,=0,=NULL) int a[10]; int *p = ...
最新文章
- Linux shell 学习笔记(10)— 处理用户输入(命令行读取参数、读取用户输入、超时处理)
- element ui 图片控件 排序_Element-ui上传图片后隐藏上存控件
- 摄像头uid怎么获取_每秒30W次的点赞业务,怎么优化?
- 【机器学习】机器学习从零到掌握之十 -- 教你使用Python实现决策树
- 自动网络搜索(NAS)的理解
- 数据库联结使用及分类
- iview tooltip自动消失_实现自动驾驶,为什么要对汽车、行人的轨迹进行预测?它与物体检测、追踪和路径规划间的关系是什么?...
- flush table mysql_MySQL flush table 导致的锁问题
- Jensen不等式及其扩展
- 亦是美网络,致力于操作系统应用与计算机网络技术的IT网站。
- 复化科特斯公式matlab_基于牛顿—科特斯积分的误差分析
- CentOS7--安装谷歌浏览器--详细步骤
- oracle后台进程介绍,Oracle后台进程介绍
- 恒生UFX交易接口基本介绍说明
- 高中数学培训高一数学提分技巧
- 怎么检测声音频率和幅值_作者特稿铝板塑性损伤的电磁超声非线性检测新方法...
- 【c++】计算句子中单词的平均长度
- criteo 点击率预估_预处理criteo数据集以预测广告的点击率
- 微信公众号怎么发PDF?
- mysql 触发器 修改记录_mysql触发器
热门文章
- 电子科技大学计算机专业考什么,2015年电子科技大学081203计算机应用技术考研专业目录及考试科目...
- SDI科普--- SD-SDI/HD-SDI/3G-SDI/12G-SDI
- 四川山海蓝图抖音播放量
- 优秀的java程序员怎么写注释的
- icd11中文版精神障碍pdf_简明国际神经精神障碍访谈检查(MINI)中文版.pdf
- j2ee课程设计—基于activiti的请休假系统
- 定时器的ETR有何功能?
- JavaScript 中 List转Tree,Tree转List
- choco安装[win10包管理器]
- docker exec详解