fflush(stdin)在gcc编译器中不起作用?
来源:互联网 发布:安妮宝贝老公 知乎 编辑:程序博客网 时间:2024/06/04 00:41
====================================================================================================================================
一、先看看如下代码片段,test.c
#include <stdio.h>int main(){ int etype; int type; int code; int value; whlie(1){ etype = 0; type = 0; code = 0; value = 0; printf("please input 4 int:\n"); scanf("%d",&etype); fflush(stdin); scanf("%d",&type); fflush(stdin); scanf("%d",&code); fflush(stdin); scanf("%d",&value); fflush(stdin); printf("etype:%d,type:%d,code:%d,value:%d\n",etype,type,code,value); } return 1;}gcc -o test test.c
这个程序首先会提示用户输入一组整数,然后等待用户输入,如果用户输入的是整数,程序会输出刚才输入的整数,并且再次提示用户输入下一组整数,然后等待用户输入。但是一旦用户输入的不是整数(如小数或者字母),假设scanf函数最后得到的一组整数是2、3、4、a,那么程序会不停地输出如下:
please input 4 intetype:0,type:0,code 0,value:0这是因为scanf("%d", &i)只能接受整数,如果用户输入了字母,则这个字母会遗留在“输入缓冲区”中(gcc编译器不支持fflush(stdin)清空输入缓冲区)。因为缓冲中有数据,故而scanf函数不会等待用户输入,直接就去缓冲中读取,可是缓冲中的却是字母,这个字母再次被遗留在缓冲中,如此反复,从而导致不停地输出上述。
二、我们在看另外一个案例,test.c
#include <stdio.h>int test;void test();int main(){ do{ printf("please input 0 or 1\n"); printf("0 is exit!\n"); printf("1 is test!\n"); scanf("%d",&test); fflush(stdin); if(test == 1) test(); else test = 0; }while(test); return 0;}void test(){ char str[80]; do{ printf("please input:\n"); gets(str); printf("str is %s",str); }while(1);}
gcc -o test test.c
执行后,首先输出如下:
please input 0 or 10 is exit!1 is test!输入1,按回车;输出如下:
please input:please input:
原因其实和《一》相同。
====================================================================================================================================
三、最后介绍一种移植性比较高的清空输入缓冲区办法
int c;while((c = getchar()) != '\n' && c != EOF);
- fflush(stdin)在gcc编译器中不起作用?
- gcc下fflush(stdin)失效
- gcc下fflush(stdin)无效的解决
- fflush(stdin)
- fflush(stdin)
- fflush(stdin)
- fflush(stdin)
- fflush(stdin)
- fflush(stdin) fflush(stdout)
- fflush(stdout); fflush(stdin);
- fflush(stdout); fflush(stdin);
- fflush(stdin) & fflush(stdout)
- fflush(stdin)与fflush(stdou)
- fflush(stdin)和fflush(stdout)
- fflush(stdin)和fflush(stdout)
- fflush(stdin)和fflush(stdout)
- fflush(stdin) 和 fflush(stdout)
- fflush(stdin)和fflush(stdout)
- 缓存深化
- linux下创建用户
- ffmpeg Windows下采集摄像头一帧数据,并保存为bmp图片
- 乱七八糟
- 不通过App Store,在iOS设备上直接安装应用程序
- fflush(stdin)在gcc编译器中不起作用?
- android动画入门篇
- java中判断字符串是否为数字的方法的几种方法
- 【Unity插件】NGUI核心组件之UIPanel
- java中的length属性和length()方法和size()方法
- popen——php多进程利器
- java实现zip压缩文件
- 2007-04-12 13:30 [轉載]基于Delphi的接口编程入门
- Aix 服务器状态监控命令