【问题标题】:Why does my output only print if there is another print after it?为什么我的输出仅在之后有另一个打印时才打印?
【发布时间】:2010-01-29 07:15:48
【问题描述】:

这里有一个有趣的小错误:

if (host != NULL) {
    printf("hi");
} else {
    printf("FAIL");
}
return 0;

根本不打印任何东西,但是:

if (host != NULL) {
    printf("hi");
} else {
    printf("FAIL");
}   
fprintf(stdout, "\n%s\n", (char *)&additionalargs);
return 0;

打印

abc

有人知道这是为什么吗?

【问题讨论】:

    标签: c printf


    【解决方案1】:

    到 stdout 的 printf 输出被缓冲。你可能想看看fflush

    【讨论】:

    • 我在想这些方面的东西(即printf 被缓冲)。我到 C 只待了一个星期。
    【解决方案2】:

    区别在于\n个字符。

    当您 printf 字符时,它们会累积在缓冲区中,直到发送“行尾”字符后才会发送到输出设备。

    【讨论】:

    • 它不必是行尾。否则,将无法在一行中输出和接收输入。
    【解决方案3】:

    尝试在if 条件之前使用fflush(stdout)

    【讨论】:

    • 在我的 if 条件之后我不想这样做吗? man fflush 表示 fflush() 强制写入作为参数给出的任何输出流。
    • 为了得到准确的输出,最好在if条件前后都放置fflush,否则缓冲区之前存在的数据也可能被打印出来。
    • 无论如何它都会被打印出来。 fflush() 之前的 if 不会神奇地使之前未打印的数据消失!
    • 在 printf 中只添加一个 '\n' 如何神奇地打印缓冲区。我猜,(很抱歉猜测 ;lol)'\n' 传统上就像换行一样,在打印新行之前刷新缓冲区。
    • Manav,在许多系统上,stdout 是行缓冲的。这意味着打印换行符会刷新缓冲区(或者如果缓冲区已满)。但是,如果您确实希望您的输出在某些点可见,则应在执行任何不涉及换行的打印后调用 fflush(stdout);
    猜你喜欢
    • 1970-01-01
    • 2022-11-21
    • 2021-01-18
    • 1970-01-01
    • 2021-07-03
    • 2015-02-23
    • 2022-01-26
    相关资源
    最近更新 更多