【问题标题】:C equivalent of std::endlC 等价于 std::endl
【发布时间】:2012-09-16 10:01:12
【问题描述】:

C++ 有std::endl。有谁知道 C 中有什么可以用来做这个的吗?

【问题讨论】:

    标签: c


    【解决方案1】:

    std::endl 具有打印换行符'\n' 字符然后刷新输出流的效果。

    如果要打印到标准输出,C 等效项是:

    putchar('\n');
    fflush(stdout);
    

    但在大多数情况下,fflush 是不必要的。

    请注意,std::endl不是的目的是提供独立于平台的行尾。字符'\n' 已经是一个独立于平台的行尾。当写入文本流时,它将被转换为平台使用的任何结尾行(\r\n 用于 Windows,\n 用于 Unix,等等)。

    【讨论】:

    • 我主要是在寻找一个独立于平台的行结尾,但你说得很好。我没有意识到 endl 会刷新输出流,但 '\n' 不一定会刷新标准输出。跨度>
    【解决方案2】:
    #include <stdio.h>
    
    putchar ('\n');   /* To the stdout stream. */
    printf ("\n");    /* Ditto. */
    

    对于任意流fp

    fputc (fp, '\n');
    

    这应该适用于行缓冲和非缓冲流。如果您想立即查看结果,完全缓冲的流需要fflush(NULL)。那么哪个是哪个? C99 标准中的血腥细节:

    最初打开时,标准错误流没有完全缓冲; 标准输入和标准输出流是完全缓冲的,如果 并且仅当可以确定流不引用 交互式设备。

    【讨论】:

      【解决方案3】:

      std::endl 刷新流,但在 C 中打印换行符不会这样做。所以你必须使用fflush

      【讨论】:

      • 在 C 中,对于行缓冲和非缓冲流,它也会被刷新。
      猜你喜欢
      • 2022-09-23
      • 2022-11-21
      • 1970-01-01
      • 2010-09-25
      • 1970-01-01
      • 1970-01-01
      • 2013-09-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多