重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
while(getchar()!='n'); -- 应当是 while(getchar()!='\n'); 这是不断循环取字符,直到取到 Enter 键时结束循环。作用,清除上面一次输入时残留在输入流中的字符。
为铁岭县等地区用户提供了全套网页设计制作服务,及铁岭县网站建设行业解决方案。主营业务为成都做网站、成都网站建设、铁岭县网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!
改用 fflush(stdin); 更佳。
ret = scanf("%d,%d",a,b); ret 为成功读得的数据个数。
清除的缓冲区中的残留数据: if (ret != 2) fflush(stdin);
最简单的是用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);
如果缓冲区是在栈里分配的话是不需要清除的,因为系统会帮你做这个工作,但是如果缓冲区是分配在堆里的话就要自己手动清除了,不然会发生内存泄露,就是虽然不使用,但占用的资源仍然不能释放,会影响系统性能。
清除缓冲区有三种方法:
方法一:
fflush(stdin);
fflush(stdin)在VC上可以使用,但是其他编译器不能保证对fflush的实现。
方法二:
setbuf(stdin, NULL);
setbuf(stdin, NULL);是使stdin输入流由默认缓冲区转为无缓冲区。但缓冲区没有了。
方法三:
char ch;while((ch = getchar()) != '\n' ch != EOF);
这种方法是最好的方法,因为它使用的是C语言的基本语法,在什么情况都是支持的。