显示两个几乎相同代码的不同输出

bis*_*CSE 0 c printf

在以下两个代码中,我无法理解这个问题.第一个代码是:

#include <stdio.h>
main() {

    int num1, num2;

    scanf("%d%d", &num1, &num2);

    printf("I LOVE MY INDIA\n"); //here is '\n' after the statement
    printf("%d", num1/num2);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这里,如果输入num1=2num2=0然后在gcc编译的输出为:

我爱我的印度
浮点异常(核心倾倒)

但对于第二个代码:

#include <stdio.h>
main() {

    int num1, num2;

    scanf("%d%d", &num1, &num2);

    printf("I LOVE MY INDIA"); //here is no '\n'
    printf("%d", num1/num2);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

对于与之前相同的输入,显示:

浮点异常(核心转储)

在这两个代码之间只有一个区别.在第一个中有一个\n后面I LOVE MY INDIA和第二个代码中没有\n.请解释为什么I LOVE MY INDIA没有在第二个代码中显示.

Sou*_*osh 6

默认情况下,标准输出(stdout)是行缓冲的.

在第一种情况下,换行符\nprintf()使输出缓冲器被刷新到输出之前的崩溃发生.所以,你必须看到print语句.

OTOH,在第二种情况下,缺少\n缓冲区保存数据的原因,下一个语句导致异常和程序异常终止.因此,缓冲的数据没有机会被刷新到输出终端.因此,你没有视觉输出.

也就是说,除以零会导致未定义的行为,严格来说,您的程序不能依赖于产生任何预期的输出.