2012-10-31 62 views
1

在评论第2行“Hello”之后打印九次,但评论第1行输出“Hello”超过九次。我的问题是这个'\ n'的作用是什么?' n'除了打印换行符还有什么其他功能?

#include<stdio.h> 
#include<stdlib.h> 

int main() 
{ 
    int tmp[10], i, n=0; 

    for(i=0;i<9;i++) 
    { 
     tmp[i]=fork(); 
     if(tmp[i]>0) 
      break; 
     else 
     { 
      printf("Hello\n"); //  ---- Line 1 
      printf("Hello "); //  ---- Line 2 
     } 
    } 
} 
+3

我不认为这个问题是由'\ n'造成的 – jondinham

+0

[在fork()打印两次之前的语句可能重复](http://stackoverflow.com/questions/10700192/statement-before-fork-printing -两次)。不同的代码,但同样的问题。 – AnT

回答

2

\ n也刷新标准输出缓冲区。如果它不存在,则可能是以前在其中输入了数据。冲洗也意味着它会在\ n处理完成后立即强制printf在屏幕上打印。否则,它是缓冲输出,你永远无法预测OS将缓冲你的输出多久,以及它何时精确地选择实际打印。

2

您可能是缓冲区刷新没有发生的受害者。 '\ n'在字符串的末尾使输出缓冲区刷新。如果输出缓冲区没有被刷新,那么你也可以从前面的printf调用中获得一些输出。所以最好在打印字符串的末尾使用'\ n'来确保我们刷新缓冲区。 你可以看看question

相关问题