【问题标题】:Printing to standard out [duplicate]打印到标准输出[重复]
【发布时间】:2018-08-10 19:45:53
【问题描述】:

我有一个 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 结尾的行)时,对于每次迭代,迭代号都会打印到标准输出(在这种情况下是终端屏幕)。当我使用 " iterations\t%d\t"(以 \t 结尾)每次迭代的迭代次数只有在我到达 printf("done iterating\n") 行时才会打印到标准输出。

我的问题是:我是否总是需要用“\n”终止字符串才能打印到标准输出?我很困惑,因为我的理解是,当我使用 fprintf("\n") 打印到文件时,我确实不需要需要在我正在打印的字符串的末尾使用任何“\n”与 fprintf("") 一起归档以成功打印到文件。

【问题讨论】:

  • 你当然不知道。 '\n' 表示“新行”。您总是需要换行吗?当然不。例如,此评论没有换行。

标签: c stdout


【解决方案1】:

stdout 被缓冲。它节省了write 系统调用——这很昂贵。它涉及用户空间和内核空间之间的上下文切换。

所以为了加快速度 - 它被缓冲并且仅在遇到新行时写入

或者使用fflush(stdout)

【讨论】: