我有一个do循环,示意性地看起来像这样
int iterations = 0 ;
do {
iterations += 1 ;
printf("iterations\t%d\n", iterations) ;
somefunction(does something) ;
} while (some condition) ;
printf("done iterating\n") ;
当我使用格式迭代时\ t%d \ n" (以\ n结尾的行),对于每次迭代,迭代编号被打印到stdout(在这种情况下是终端屏幕)。相反,我使用" iterations \ t%d \ t" (以\ t结尾)每次迭代的迭代次数只有在到达printf行时才打印到标准输出("完成迭代\ n")。
我的问题是:我是否总是需要使用" \ n"来终止字符串?打印到标准输出?我很困惑,因为我的理解是,当我使用fprintf(" \ n")打印到文件时,我不需要使用任何" \ n& #34;在字符串的末尾我打印到文件与fprintf("")成功打印到文件。
答案 0 :(得分:4)
stdout
已缓冲。它节省了write
系统调用 - 这很昂贵。它涉及用户空间和内核空间之间的上下文切换。
所以为了加快速度 - 它是缓冲的,只有在遇到新行时才会写入
或者使用fflush(stdout)
。