printf 不会打印到屏幕上

12 浏览
0 Comments

printf 不会打印到屏幕上

如果我在Windows 7的Cygwin上尝试运行以下简单代码,

#include 
int main() {
int i1, i2, sums;
printf( "Enter first integer\n" );
scanf( "%d", &i1 );
printf( "Enter second integer\n" );
scanf( "%d", &i2 );
sums = i1 + i2;
printf( "Sum is %d\n", sums );
return 0;
}

它能够顺利编译(通过gcc),但当我尝试执行它时,第一条语句("Enter first integer")不会打印到终端上,我必须输入两个连续的数字(例如3和4)才能得到,

3
4
Enter first integer
Enter second integer
Sum is 7

有人可以解释一下这里发生了什么吗?在MinGW下这个问题没有出现。

0
0 Comments

printf函数不打印到屏幕的原因是输出流被缓冲。数据尚未写入到受控序列中。为了仍然能够使用缓冲并显式地强制执行所需的行为/显示,可以在每次写入后调用fflush函数。

解决方法如下:

printf("Enter first integer\n");
fflush(stdout);
scanf("%d", &i1);

通过在每次写入后调用fflush函数,能够确保printf函数立即将数据输出到屏幕。

0
0 Comments

printf函数不会将输出立即打印到屏幕上,而是将其缓存在缓冲区中,直到缓冲区满或者程序结束时才进行打印。这可能导致printf的输出没有立即显示在屏幕上,给调试程序带来困扰。

要解决这个问题,可以显式地启用行缓冲。可以通过调用setlinebuf函数来实现,将stdout设置为行缓冲模式。

以下是示例代码:

#include 
int main() {
    setlinebuf(stdout);
    
    printf("Hello, world!\n");
    
    return 0;
}

通过调用setlinebuf(stdout)函数,可以确保printf函数的输出立即显示在屏幕上,而不是等待缓冲区满或程序结束。这有助于在调试过程中更快地查看输出结果。

希望这个解决方法能够帮助你解决printf函数无法立即打印到屏幕上的问题。

0
0 Comments

printf函数无法在屏幕上打印输出的问题可能是由于缓冲的原因导致的。解决方法是使用setbuf(stdout, NULL);来禁用标准输出的缓冲。这个方法是否依赖于编译器/工具链或平台,以及是否可以通过编译器标志来禁用缓冲,还需要进一步讨论。

0