至于VC++输出缓冲区的同等有点点随笔

【题外话】

当时是2011年之写的同样首稿子,原来没有博客所以就发于了别处,现在以变更到此来,希望能对初学VC++的同校有助,尤其是用VC++
6.0练习的同班。

 

【文章索引】

  1. 哼长之高利贷
  2. 察觉题目
  3. 后续

 

【一、好长之前奏曲】

今晚出相同同桌提问我说,说system(“pause”)不好用了(见图1),即出现按“要按照任意键继续…”(即利用system(“pause”)的结果)后才见面冒出程序最后之运转结果(即兔子可能隐藏于。。。的那么片执行)。我平开始连无奇怪,只是认为程序写错了,就顺口说了句。

C++ 1
(图1)

结果当他拿代码发过来的时段自己实在没有找到问题所在,而且system(“pause”)一行实在当cout之后。于是索性打开了VS2008,把他代码复制进去,由于他自用的过时的C++库(VS2008请勿支持),所以自己随手管援都转化时的了(图2、图3)。
C++ 2(图2)->C++ 3(图3)

 

然后F5运行,竟然一点题目无(图4)。

C++ 4
(图4)

下一场自己以随口说了句没问题啊。不过当是从不见面这么简单,然后打开了VC++6.0,把他作过来的代码复制进去,结果真如他发放我的觊觎一律。然后自己而将自家转了的代码复制到VC++6.0中,结果同时跟VS2008里平等没有其它问题。

 

【二、发现题目】

1、问题何在

百度了瞬间斯题目,csdn上有人说于cout后加endl就得缓解。回到程序后自己还确实发现先后尚未出口的那么有些确实并未加endl,同时自忽然想起是休是跟缓冲区有关,虽然我本掌握cout是将字符先放到缓冲区,但是不亮该运行模式。

2、缓冲区的题目

乃本上述思路百度了生VC++如何强制输出缓冲区,发现cout<<flush可以强制将缓冲区中早就怀的内容输出出来。于是当system(“pause”)之前增长了马上词话,跟想象的同——成功了。

3、微软的题材

题目查找出来了,可是怎么引用<iostream>可以使引用<iostream.h>不得以吧,于是继续查看资料,发现立即真是VC++的题材(见图5)。原文在微软知识库中:http://support.microsoft.com/kb/94227/EN-US/

C++ 5

(图5)

“在就此微软C/C++开发的程序中,用cout输出的流是被缓冲的。换言之,信息送至cout流后并从未当即出现于屏幕中,而是等缓冲区清空了才显示。在VC++4.2与之后的版被,这种情形就会起在采用老式的iostream库。”

好吧,微软直接说了,这种情景单见面起在应用老式的iostream的堆栈,那吧就算是经过<iostream.h>调用的了。到是之题材为就彻底明了了。

 

【三、后续】

1、针对老式的iostream.h库,微软供的季栽缓解方法:

(1)cout<<…<<endl;

(2)cout.flush();

(3)cout<<…<<flush;

(4)退出程序的上会清空当前使用的富有缓冲区。

末尾一长正是坑爹啊,当然就为不怕说明了,为什么程序执行了最后一修system(“pause”)后才将前输出的情输出出来。

2、建议大家要么用标准C++的类库,也就是并非采取带来“.h”的库,C++标准早已明确指出不再支持老式的类库了。其实以后来的VC++版本被呢不再支持老式的库房了,所以采用VC++
6.0的同室要还在这么描写建议尽快改变过来。

3、使用专业C++类库的当儿,不要遗忘引用标准命名空间,即当援类库后形容一句“using
namespace std;”,当然你吗得以写cout时。