stdout-一个c语言缓冲区的程序段

问题描述

一个c语言缓冲区的程序段

一个程序段
for(i=0;i<10;i++)
{
printf("%d",i);
//fflush(stdout);
sleep(1);
}
结果有两种:
1 没有有fflush()函数的话10秒后输出0-9
2 有fflush()的话一秒输出一个数字 结果还是0-9
求对两种结果的解释?

解决方案

printf是带缓冲区的,你每循环一次,缓冲区一次;
一直到循环结束,然后是退出程序前,系统自动刷新所有缓冲区;
所以你看到所有的结果一次输出;
//------
不带fflush的,就是每次循环都直接刷新缓冲区,所以你会在每次循环都看到输出;
//------
此外,你还可以把stdout改成stderr测试一下;
stderr是默认刷新缓冲区的,因为错误--刻不容缓;
//-----
希望能帮到你!

解决方案二:

终极回答:
printf() 输出的的条件:(1)缓冲区满;(2)调用fflush()函数。
针对你的情况,不调用fflsuh()时,缓冲区足够大能容纳0-9这10个字符,所以不会输出。直到main函数退出后,由C运行时调用fflush()输出。
调用fflush()时,则直接输出了。

时间: 2024-12-04 18:47:02

stdout-一个c语言缓冲区的程序段的相关文章

c语言缓冲区的问题,请懂的人指导一下

问题描述 c语言缓冲区的问题,请懂的人指导一下 #include char outbuf[BUFSIZ]; int main() { setbuf(stdout,outbuf); puts("Tis is a test of buffered output.n"); puts(outbuf); fflush(stdout); puts(outbuf); return 0; } 输出结果: This is test of buffered output. This is test of

如何开发一个多种语言版本的C#程序

程序 在C#中有多种使用资源文件的方法,能够很方便地开发全球通用的应用程序.本文通过一个简单的小例子,来讲解在C#中如何利用资源文件,快速开发一个多种语言版本的程序.本例中只有一个窗体,三个控件,能够根据用户的设置以中文或英文界面运行.开发环境是Windows 2000 Professional.Microsoft Visual Studio.NET 2002.具体开发步骤如下: 一.新建项目 启动Microsoft Visual Studio .NET,新建一个C#项目MyApp,本例工程存放

基础-请问一个C语言奇怪的问题,求大神

问题描述 请问一个C语言奇怪的问题,求大神 //加了所有需要的头文件intmain(int argc char **argv){ struct event timeout; struct timeval tv; struct event_base *base; int flags; //printf(""pathvar=%s""getenv(""PATH"")); 注释1#ifdef WIN32 WORD wVersionRe

c语言-求问一个C语言字符指针的问题

问题描述 求问一个C语言字符指针的问题 #include void Initialize (char * a, char * b) { a[0] = 'T'; a[1] = 'h'; a[2] = 'i'; a[3] = 's'; a[4] = ' '; a[5] = 'i'; a[6] = 's'; a[7] = ' '; a[8] = 'A'; a[9] = ''; b = a; b[8] = 'B'; } #define ARRAY_SIZE 10 char a[ARRAY_SIZE];

查询语句-基于eclipse平台下用C++做一个SPARQL语言的解析器

问题描述 基于eclipse平台下用C++做一个SPARQL语言的解析器 近期有个项目就是做一个SPARQL语言的解析器,将SPARQL查询语句解析成语法树的形式,我真的不知道从哪里下手,真心求助.有乐意帮助的可以跟我详细交流,万分感谢- 解决方案 下面这个看看http://wenku.baidu.com/link?url=PsJMCc7EvZJJZgtgPnM_pi_yLB9zHsAZRz7jsGEBhMr2hhrjb4k9-sIi_L3QkJY2oUSPbL2HF0N7Cd5JycxQpDT

c语言基础-真的很着急,大一学生党,求大神指导写一个c语言拨号程序

问题描述 真的很着急,大一学生党,求大神指导写一个c语言拨号程序 能显示出通讯录中所有人姓名,当选中某个姓名时,屏幕上模拟打字机效果依次显示出此人的电话号码中的各个数字,并伴随相应的拨号声 解决方案 http://zhidao.baidu.com/link?url=svF4fjRTNuBmCJyCiRipzB_21UO5zvNc0hCye7qj8nxOY1lC78667ycDqYnJ7xHiGT00M4NuYqGIak2R5cEU961mjRl1ADLf-Eh1nDKpiBi

c语言-求助一个java语言的一个for循环语句

问题描述 求助一个java语言的一个for循环语句 for(int i=2,j=1; j<10; i=(i==9)?(((++j)/j)+1):(i+1)){ System.out.printf("%d*%d=%2d%c",i,j,i*j, ((i==9)?'n':' ')); } 输出结果是99乘法表. 这个for循环里的++j为什么不能换成j+1啊? 谢谢各位了. 解决方案 ++j是改变变量值的 j+1是不改变变量值的 解决方案二: ++j 等效于j=j+1 你用j+1 原j

LaTeXila简介:Linux上的一个多语言LaTeX编辑器

LaTeXila 是一个多语言 LaTeX 编辑器,专为那些偏爱 GTK+ 外观的 Linux 用户设计.这个软件简单,但又足够强大,可定制性良好,所以如果你对 LaTeX 感兴趣,那么你就应该尝试一下这个工具. 在下面的快速指南中,我将展示如何使用 LaTeXila 并介绍其主要功能.但在开始之前你可能要问: 为何选择使用 LaTeX? 假如我想创建一个文本文档,为什么我不使用 LibreOffice 或者 Abiword 这些常规的工具呢?原因是相比于常规的文本编辑器,LaTeX 编辑器一般

如何撸一个领域语言

如何撸一个领域语言 DSL概述 DSL是一种抽象的概念,泛指用在特定领域的语言.例如在数据库管理系统中,使用SQL增删改查数据库内容,在C++编译中,Makefile也是一种DSL,它专用来描述各个编译单元的依赖关系以及编译参数,以此规则控制编译器和链接器. 从实现方法上来分类,DSL分为内部和外部DSL.内部与外部,指的是实现DSL的方式是否与宿主语言隔离.就是所谓内部DSL,就是用一种提供语言扩展功能的宿主语言来扩充的.比如Clojure支持暴露语法树给程序开发者(quote/unquote