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信息。
在上面的这个程序中,如果连续输入两个数,第二个scanf在input buffer中发现了45,于是程序直接结束。
在上面这个例子中,你在第一个字母之后的按下的“enter”键对“scanf” function来说也是有效的输入,所以第二个“scanf”就把enter读到“b”中,这都是和input buffer有关的非常有趣的bug。
在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。
相关文章推荐
- 浅析angular
- 学习javascript的闭包,原型,和匿名函数之旅
- Velocity浅析及与Jsp、Freemarker对比
- Javascript中的数据类型之旅
- html5-svg标签使用基础一
- js中 getElementById()和alert()对象用法
- 谈谈JavaScript自定义回调函数
- node-mysql 在4.2.0的时候遇到的错误
- ExtJs迄今datefield控制设置默认值
- ReactiveCocoa基础篇
- JSP模板文本
- jquery设置元素的readonly与diabled属性方法
- 基于bootstrap的web登陆实例
- 【前端学习笔记】ajax与php之间的互动
- Javascript中的数据类型知多少
- html+css
- MVC - Pass array from model to JS
- CSS :after、before、<!DOCTYPE>
- jsoncpp的简单使用
- css网页编程【详解】