Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 将换行符添加到printf()是否等同于刷新流?_C_Printf - Fatal编程技术网

C 将换行符添加到printf()是否等同于刷新流?

C 将换行符添加到printf()是否等同于刷新流?,c,printf,C,Printf,以下程序显示了当发生“除以零”等错误时,缓冲I/O如何在程序中引起问题: int main() { int a = 1, b = 0, c; printf("Dividing..."); c = a/b; printf("Answer is: %d\n", c); return 0; } 输出为浮点异常(内核转储) 很公平。但令人惊讶的是,如果我将第一个printf更改为printf(“divising…\n”),这个文本实际上是在程序崩溃之前打印出

以下程序显示了当发生“除以零”等错误时,缓冲I/O如何在程序中引起问题:

int main()
{
    int a = 1, b = 0, c;

    printf("Dividing...");
    c = a/b;

    printf("Answer is: %d\n", c);
    return 0;
}
输出为
浮点异常(内核转储)

很公平。但令人惊讶的是,如果我将第一个printf更改为
printf(“divising…\n”),这个文本实际上是在程序崩溃之前打印出来的(顺便说一下,我在Linux上运行GCC)


我是否可以得出这样的结论:添加一条换行符等同于刷新?如果是这样的话,如果我所有的
printf()
字符串都以
\n
结尾,我实际上剥夺了缓冲I/O的好处?

如果你的标准输出是到一个终端,是的,它等于刷新,因为
printf()
将使用基于行的缓冲


如果它被重定向到一个文件,则不会。在本例中,
printf()
使用更大的缓冲区,通常对应于文件系统块大小或其他什么,以优化IO。

惊人的答案,我必须说,惊人的启示!:D