#include <stdio.h>
#include <unistd.h>
int main (){
while(1){
fprintf (stdout,"hello-out");
fprintf (stderr,"hello-err");
sleep (1);
}
return 0;
}
嗯,我认为这只是简单的打印,你好 - 然后hello-err再休息一下并再次打印那些文字,但是没有,奇怪的事情正在发生,它只是打印hello-err然后需要一秒休息而且同样的事情。为什么?
但是等等,然后我决定将它们分开打印,现在它起作用了。
fprintf (stdout,"hello-out\n");
fprintf (stderr,"hello-err\n");
----------与------------
一样
fprintf (stdout,"hello-out\n");
fprintf (stderr,"hello-err");
那么'\ n'的重要性在哪里?这与潮红有关吗? 因为我读到'\ n'用于冲洗。
并且还在stdout上打印文字,不产生任何输出:(
fprintf (stdout,"hello-out");
fprintf (stdout,"hello-err");
再次为什么?
答案 0 :(得分:11)
默认情况下,stdout
是行缓冲的。这意味着除非您明确刷新它,否则无法保证何时将您的写入写入目标,直到它看到\n
。
stderr
默认情况下是无缓冲的。每次写作都会立即写完。
答案 1 :(得分:1)
我已经改变了你的代码
#include <stdio.h>
#include <unistd.h>
int main (){
int i;
for(i=0;i<5;i++){
fprintf (stdout,"hello-out");
fprintf (stderr,"hello-err");
sleep (1);
}
return 0;
}
现在输出
hello-errhello-errhello-errhello-errhello-errhello-out
hello-outhello-outhello-outhello-out
因为stderr没有被缓冲所以它的打印就像它来了。但是stdout是行缓冲的,所以它会在\ n出现时或者你的代码终止时或任何时候打印...所以最后我看到stdout打印
答案 2 :(得分:-3)
不,这不用于冲洗。 fflush用于此。 \ n只是表示换行符。