c语言缓冲问题
来源:互联网 发布:大数据数据库有哪些 编辑:程序博客网 时间:2024/05/17 17:38
最近做acm时候,老是在输入输出的问题上卡时间,真是很蛋疼啊,故总结了下,关于清空的问题。
清空键盘缓冲区的一种好方法!
用 rewind(stdin); 语句可以达到很好的清空键盘缓冲区的作用。不用考虑太多其他因素。这是我在一本名为《软件开发:编程与设计(C语言版)》中所了解到的,作者是USA的David Conger。以前也了解到其他的清空键盘缓冲区的方法,如:用getchar();fflush(stdin);等。但感觉很麻烦,不好用,也不容易理解。而rewind(stdin)简单好用,而且是一种可移植的方法。
举个例子:
#include <stdio.h>
int main()
{
int i;
char aString[3];
printf("Please enter some characters:"); /*先向键盘缓冲区里输入无用字符*/
getchar();
rewind(stdin); /*清空键盘缓冲区里的无用字符*/
printf("Please enter 'OK': "); /*输入字符串“OK”*/
for(i=0;i<2;i++) /*字符串aString接受字符串“OK”*/
{
aString[i]=getchar();
}
aString[i]='\0';
puts(aString); /*输出字符串aString*/
return(0);
}
Microsof Visual C++下调试结果:
输入:abcdefghijk回车OK回车
输出:OK
之前缓冲区里的abcdefghijk垃圾字符都被清空了。
下面向新手解释一下rewind(stdin);的工作原理。
C语言把键盘,显示器等设备当做文件来处理,也就是说从键盘输入相当于从一个文件中读入,向显示器输出相当于向一个文件写出。
而stdin是C标准库定义的标准文件之一,它与键盘相关联。我一般把它理解为指向键盘这个“文件”的指针。
而rewind()函数的作用是把文件的当前位置指针指向文件头。
两者结合,rewind(stdin);的作用也就是把“指向键盘(一个文件)的指针从当前位置挪到键盘(一个文件)开头”,相当于抛弃了当前键盘缓冲区中的数据,重新开始输入。
虽然并不是真正的把缓冲区里的数据全部清掉,但却起到了清空键盘缓冲区的作用。
- c语言缓冲问题
- c语言stdout,stdin,stderr缓冲问题
- c语言的输入缓冲
- C语言中的缓冲机制
- 【C语言】缓冲文件系统和非缓冲文件系统
- linux下C语言printf没有输出的问题(shell的行缓冲机制)
- 关于c语言的getchar的缓冲
- C语言笔记(typedef, 缓冲)
- C语言 双缓冲控制台防闪屏技术
- C程序设计语言--缓冲、常见的问题
- 缓冲问题
- C程序设计语言--缓冲、常见的问题和全局变量
- C语言的问题
- C语言指针问题
- C语言问题一则
- c语言问题
- C语言 for问题
- c语言的问题
- minSdkVersion、targetSdkVersion、targetApiLevel的区别
- POJ-3126 Prime Path 解题报告
- IFeatureConstruction的用法
- China Northeast Multi-University Training Contest I J - Remoteland
- 插入排序(测试版)
- c语言缓冲问题
- 安装 MySQL
- 【redhat5.5】静态路由表实验
- 发布android app到android market的方法
- Struts2分页实现源码
- Google的验证码,这不是折腾人么?
- Python pdb基础调试
- sybase Adaptive Server Enterprise 12.5.4
- 泛型之通俗易懂