2014-12-06 46 views
0

我注意到我的一些程序在C++中的奇怪行为,当我试图弄清楚它是什么时,我发现,控制台输出发生了错误。我用相同的行为使用iostream和cstdio函数。当我在控制台上打印某些东西时,它根本不显示。这里是我用于观察这种奇怪行为的代码。 这段代码propertly输出一切(即使它不应该IMO):在简单的C++程序中没有控制台输出

#include <cstdio> 
using namespace std; 
int main(void) { 
    int a = 0; 
    scanf("%d", &a); 
    a++; 
    printf("result is %d", a); 
} 

这可是一个(正确的,我认为)不显示任何内容,只有在运行完消息

#include <cstdio> 
using namespace std; 
int main(void) { 
    int a = 0; 
    scanf("%d", &a); 
    a++; 
    printf("result is %d \n", a); 
} 

我也试过在“\ n”之前删除空格,没有任何区别。但是,当我在程序的最后放置更多与“\ n”相同的printf函数时,所有内容都可以正确显示(当然是多次显示)。 Iostream的行为方式类似 - 使用endl不会导致任何内容出现在控制台上。我究竟做错了什么?至于导致故障的原始代码,我注意到在我的输出中没有出现任何东西,但在我的学校中,相同的代码正确地输出了所有内容。我正在NetBeans 8.0.2下工作。在此先感谢帮助

+2

这些代码片段中没有太多的C++。 – 2014-12-06 17:11:48

+1

至于你的问题,你是什么意思,“不显示任何东西”?您呼叫'scanf'会阻止*,直到您输入新行。 – 2014-12-06 17:14:02

+0

由于您将此标记为C++,请尝试使用'cin'和'cout'。 :-) – 2014-12-06 17:14:15

回答

0

所有输出数据在打印到控制台之前都会被缓冲。您可以使用fflush\n来刷新输出流并打印所有数据。

+0

是的,但这是奇怪的行为 - 当我使用换行符时,什么都不打印 - 就像缓冲区被刷新到其他地方而不是我的控制台 – fifco 2014-12-06 17:25:32