十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
在输入语句后使用fflush(stdin);
成都创新互联公司10多年成都定制网页设计服务;为您提供网站建设,网站制作,网页设计及高端网站定制服务,成都定制网页设计及推广,对白乌鱼等多个方面拥有丰富的网站维护经验的网站建设公司。
表示清楚标准输入设备(即键盘)的缓冲区。
最简单的是用fflush()函数。
此函数包含在stdio.h头文件中,用来强制将缓冲区中的内容写入文件。
函数原型:int fflush(FILE *stream) ;
函数功能:清除一个流,即清除文件缓冲区.
常用场合:
一、ff(stdin)刷新标准输入缓冲区,把输入缓冲区里的东西丢弃
fflush(stdout)刷新标准输出缓冲区,把输出缓冲区里的东西打印到标准输出设备上。
二、scanf()函数接收输入数据时,遇以下情况结束一个数据的输入:(不是结束该scanf函数,scanf函数仅在每一个数据域均有数据,并按回车后结 束)。
① 遇空格、“回车”、“跳格”键。
② 遇宽度结束。
③ 遇非法输入。
键盘缓冲区就可能有残余信息问题。
scanf()函数应该只是扫描stdin流,这个残存信息是在stdin中
解决就要在scanf()函数之后加个fflush(stdin)
三、写文件的时候 不会马上进行物理磁盘的文件读写,而是先写入缓存,当缓存中内容达到一定程度后再写
FILE *fp=fopen("a.txt","w");
fprintf(fp,"abcdef");
fflush(fp);
flushall
添加义项
函数名: flushall
功 能: 清除所有缓冲区
用 法: int flushall(void);
程序例:
#include stdio.h
int main(void)
{
FILE *stream;
/* create a file */
stream = fopen("DUMMY.FIL", "w");
/* flush all open streams */
printf("%d streams were flushed.\n",
flushall());
/* close the file */
fclose(stream);
return 0;
}
scanf()是C语言中的一个输入函数。
与printf函数一样,都被声明在头文件stdio.h里,因此在使用scanf函数时要加上#include stdio.h。(在有一些实现中,printf函数与scanf函数在使用时可以不使用预编译命令#include stdio.h。)
函数 scanf() 是格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中。scanf() 从标准输入流stdin中读内容的通用子程序,可以说明的格式读入多个字符,并保存在对应地址的变量中。
扩展资料:
scanf()用法举例:
用scanf输入一个整数
#includestdio.h
int main(){
int num=0;
printf(“请输入一个个整数”);
scanf(“%d,num);
printf(“num是%d\n”,num);
scanf(“%*[^\n]”);
scanf(“%*c”);//清空缓冲区
printf(“请输入一个个整数”);
scanf(“%d,num);
printf(“num是%d\n”,num);
return 0;
}
参考资料来源:百度百科-scanf
有时候需要先调用cin n来输入一个数n,然后再调用getline(cin,string s)来获取n行输入。
在这种情况下,在调用cin和getline之间必须清空输入缓冲区,否则getline会把调用cin时最后输入的换行符读入。
清空缓冲区的方法:调用cin.ignore( )函数,最好是先调用cin.clear( )函数再调用cin.ignore( )函数。
cin.ignore( int a,char c)函数定义:不断从输入流cin中提取字符然后忽略提取到的字符,直到遇到字符c或者提取到的字符个数达到a为止。换句话说,这个函数清空输入流cin中字符c(包括字符c)之前的字符,或者清空了a个字符都没有遇到字符c也结束。一般为了只让第二个参数起作用,我们把第一个参数设为一个很大的数(比如INT_MAX)。而第二个参数常设为“\n”,也就是换行符,这样我们可以清空输入流cin中换行符(包括换行符)之前的所有字符。
cin.ignore()函数的默认参数为,1和“EOF”,即默认形式为cin.ignore(1, EOF),把EOF前的1个字符清掉,没有遇到EOF就清掉一个字符然后结束。
while(getchar()!='n'); -- 应当是 while(getchar()!='\n'); 这是不断循环取字符,直到取到 Enter 键时结束循环。作用,清除上面一次输入时残留在输入流中的字符。
改用 fflush(stdin); 更佳。
ret = scanf("%d,%d",a,b); ret 为成功读得的数据个数。
清除的缓冲区中的残留数据: if (ret != 2) fflush(stdin);