您的位置:首页 > Web前端

C buffer

2015-10-18 09:48 274 查看
这学期在Dartmouth上ENGS20(Introduction to Scientific Computing),好多东西不记下来就会忘,所以开一个笔记。

在C语言中,输入和输出都是有buffer的,即使在程序中写了“printf”,也不会马上在屏幕上输出,而是存在buffer这样一个存储区域,只有在两种情况下buffer中的东西才会被显示出来,第一是buffer已经被填满了,第二种就是你故意把它搞出来。第二种又分两个情况,'scanf'和'\n'。而用‘fprintf’向文件中输入,如果buffer满了,也会输出,或者你可以用“fflush”手动输出。

其实,C语言为输入(键盘)和输出(显示器)创造了两种特殊文件,“stdin”和“stdout”,这些文件我们可以把它当做其他已经被打开的文件来使用,以下两个语句是等效的:

fprintf(stdout, "%c", ch);

printf("%c", ch);

需要注意的是,在debug的时候一定要用printf(“\n”); 而不是printf(“”); 因为即使程序出现错误后者无法显示你的debugging信息。

#include<stdio.h>

int main(void){
int a, b;
printf("Enter a number:");
scanf("%d", &a);
printf("Enter another number: ");
scanf("%d", &b);
printf("You have entered %d and %d\n", a, b);
return (0);
}

/*
sample output:

Enter a number:3
Enter another number: 45
You have entered 3 and 45

Enter a number:3 45
Enter another number: You have entered 3 and 45
*/


在上面的这个程序中,如果连续输入两个数,第二个scanf在input buffer中发现了45,于是程序直接结束。

char a, b;
printf("enter a character:");
scanf("%c", &a);
printf("enter another character:");
scanf("%c", &b);
printf("haha, you got an error!\n");

/*
sample output:
enter a character:r
enter another character:haha, you got an error!
*/


在上面这个例子中,你在第一个字母之后的按下的“enter”键对“scanf” function来说也是有效的输入,所以第二个“scanf”就把enter读到“b”中,这都是和input buffer有关的非常有趣的bug。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: