VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 699|回复: 3

关于fflush(stdout)

[复制链接]

1

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-1-17 18:20:01 | 显示全部楼层 |阅读模式
大家好,
在VC下调试时,单步执行每一条printf语句,console都可以相应的显示。
为什么不需要执行fflush(stdout)?

正常来说,应该像下面这样
printf(.....);
fflush(stdout);
每一条printf语句后面都要跟随一条fflush语句才能有相应的显示。不然的话,printf语句的信息会被缓存起来。

我不知道是不是VC 在debug调试时,对printf做了特殊处理,使之不需要缓存,直接输出到console?
希望得到大家的帮助。





回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-9-2 01:15:01 | 显示全部楼层
我写c程序的时候,一直都只使用了printf(……),同样能够显示出结果,为什么一定要用fflush(stdout)呢?

对于楼主的提问,我也有同样的困惑,还请高手仔细讲解一下吧,先谢过了!
回复

使用道具 举报

0

主题

4

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
发表于 2020-9-2 01:30:02 | 显示全部楼层
如果你不fflush,结果会在系统有空闲的时候输出,这一点在ms的系统上表现不明显,但是在linux/unix下表现的比较明显,因为在linux/unix下,习惯上将stdout进行重定向,比如文件或打印机等等,假设重定向的是一个文件,printf就输出到了文件里面,如果你不执行fflush语句,则文件实际内容的改变有可能在其后某个时间才进行。
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-9-2 16:00:01 | 显示全部楼层
在printf()后使用fflush(stdout)的作用是立刻将要输出的内容输出。
当使用printf()函数后,系统将内容存入输出缓冲区,等到时间片轮转到系统的输出程序时,将其输出。
使用fflush(out)后,立刻清空输出缓冲区,并把缓冲区内容输出。
例如:
         for (ctr = 1; ctr <= wait; ctr++)
         {
                printf(".");                        /* print a dot */
                fflush(stdout);                        /* force dot to print on buffered machines */
                sleep((int) 1);                        /* pause 1 second */
         }

用fflush(stdout)能使机器每输出一个.暂停一秒钟,而不会出现乱序(例如:PP。。。PP。PPP。。。等)现象。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表