请选择 进入手机版 | 继续访问电脑版
贠老师培训群:150322713    贠老师QQ:767708506

贠老师office培训-excel学习网

 找回密码
 立即注册
点击咨询贠老师
查看: 478|回复: 12

[C语言] 为什么直到程序结束时才看到屏幕输出?

[复制链接]

3172

主题

3269

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
22691
发表于 2015-12-24 22:28:03 | 显示全部楼层 |阅读模式
有时,依赖于所使用的编译程序和操作系统,系统会对输出进行缓冲。“缓冲”是指任何要送到设备上的输出,无论设备是屏幕、磁盘还是打印机,都被存储起来,直到输出量大到足以进行高效的输出。当存储了足够多的输出信息时,再整块地向指定的设备输出。

这种过程会给不了解其作用的程序员带来两个问题。首先,在程序送出输出内容后,它可能要再过一段时间后才会在屏幕上显示出来。如果程序员正在试图跟踪程序的当前运行状态,他就会被这种效果所困扰。

其次,更可怕的是,在程序显示提示信息并等待用户输入时,很可能就会发生问题。当程序试图从用户那里得到输入信息时,输出缓冲区可能还未被“填满”,因此送往屏幕的提示信息可能不会显示出来,用户也就不知道程序已经在等待他进行输入了——他所能得出的结论只能是这个“可爱”的程序突然停止工作了。

如何解决这个问题呢?有两种办法。第一种办法是在程序的开始部分,在进行任何输出之前,加入下述语句:
    setvbuf(stdout,NULL,_IONBF,O);
该语句的作用是实现程序到屏幕的无缓冲输出。当这条命令被执行后,每一个被送往屏幕的字符都会立即显示出来。

用这种办法解决这个问题确实比较方便,但是还不够理想。笔者不想在这里对屏幕输入和输出展开一次技术讨论,但笔者要指出这样一点,即对屏幕输出进行缓冲是有充分的理由的,并且你还会希望这样做。

这佯一来,就引出了解决输出缓冲问题的另一种办法。当fflush()命令作用于一个输出缓冲区时,它会使该缓冲区“倒空”自身,而不管它是否已被填满。因此,为了解决屏幕缓冲问题,在需要“倒空”输出缓冲区时,你只需插入如下命令:
    fflush(stdout):
在程序要求用户输入之前,或者在程序开始一项耗时的大型的计算工作之前,最好先“倒空”输出缓冲区。这样,当程序暂时停住时,你就能清楚地知道其原因了。
回复

使用道具 举报

1

主题

1042

帖子

76

积分

注册会员

Rank: 2

积分
76
发表于 2016-1-5 10:40:14 | 显示全部楼层
写的不错,支持一下哟
回复 支持 反对

使用道具 举报

3

主题

996

帖子

53

积分

注册会员

Rank: 2

积分
53
发表于 2016-1-5 21:19:46 | 显示全部楼层
先收藏再学习,谢谢啦!
回复 支持 反对

使用道具 举报

2

主题

941

帖子

108

积分

注册会员

Rank: 2

积分
108
发表于 2016-1-7 21:45:54 | 显示全部楼层
好东西一定要看看!
回复 支持 反对

使用道具 举报

1

主题

886

帖子

5

积分

注册会员

Rank: 2

积分
5
发表于 2016-1-22 18:44:24 | 显示全部楼层
大神啊!豁然开朗。。。。。。
回复 支持 反对

使用道具 举报

0

主题

864

帖子

54

积分

注册会员

Rank: 2

积分
54
发表于 2016-8-21 22:46:35 | 显示全部楼层
谢谢您的分享!
回复 支持 反对

使用道具 举报

2

主题

920

帖子

87

积分

注册会员

Rank: 2

积分
87
发表于 2016-9-22 22:44:50 | 显示全部楼层
抱走~老好人
回复 支持 反对

使用道具 举报

0

主题

896

帖子

61

积分

注册会员

Rank: 2

积分
61
发表于 2016-12-27 10:39:22 | 显示全部楼层
好东西一定要看看!
回复 支持 反对

使用道具 举报

0

主题

896

帖子

61

积分

注册会员

Rank: 2

积分
61
发表于 2017-6-30 15:26:30 | 显示全部楼层
顶顶
回复 支持 反对

使用道具 举报

4

主题

1005

帖子

195

积分

注册会员

Rank: 2

积分
195
发表于 2018-2-24 15:08:47 | 显示全部楼层
不错,学习了
回复 支持 反对

使用道具 举报

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

本版积分规则



陕ICP备15003731号  

贠老师培训 GMT+8, 2018-11-21 01:33 , Processed in 0.229281 second(s), 32 queries .

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