我正在使用gcc 7.3和g ++ 7.3。 GCC和G ++出错。例如,
#include <stdio.h>
#include <unistd.h>
int main() {
printf("a");
sleep(1);
return 0;
}
等待1秒后打印'a',但是当我使用printf("a\n");
时,它正常工作。它在C ++上是一样的。例如,
#include <iostream>
#include <unistd.h>
int main() {
std::cout << "a";
sleep(1);
return 0;
}
等待1秒后,'a'打印。但是,当我使用std::cout << "a" << std::endl;
时,它可以正常工作。问题是什么以及如何解决?
答案 0 :(得分:3)
sleep()
就像手动安排流程。 printf()
将数据放入stdout
流中,而不是直接在监视器上。
printf("a"); /* data is there in stdout , not flushed */
sleep(1); /* as soon as sleep(1) statement occurs your process(a.out) jumped to waiting state, so data not gets printed on screen */
因此,您应该使用fflush(stdout)
或使用\n
清除stdout
信息流。
答案 1 :(得分:1)
您会看到此行为,因为stdout在与终端一起使用时通常为line buffered
,与文件一起使用时为fully buffered
,字符串将存储在缓冲区中,可以通过输入新行或缓冲区填充或程序终止时
您也可以使用setvbuf
覆盖缓冲模式,如下所示
setvbuf(stdout, NULL, _IONBUF, 1024);
printf("a");
它将打印a
而不进行缓冲,请查看https://www.tutorialspoint.com/c_standard_library/c_function_setvbuf.htm以使用setvbuf
还可以查看不同类型的缓冲流。
希望这会对你有所帮助。