【问题标题】:Showing different output for two almost same code [duplicate]显示两个几乎相同的代码的不同输出[重复]
【发布时间】:2015-08-22 17:07:58
【问题描述】:

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

#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;
}

如果输入是num1=2 和num2=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;
}

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

浮点异常(核心转储)

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

【问题讨论】:

    标签: c printf


    【解决方案1】:

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

    在第一种情况下,printf() 中的换行符 \n 会导致输出缓冲区刷新到输出在崩溃发生之前。所以,你必须看到 print 语句。

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

    也就是说,除以零会导致undefined behavior,严格来说,不能依赖您的程序产生任何预期的输出。

    【讨论】:

      猜你喜欢
      • 2019-04-21
      • 2023-03-27
      • 1970-01-01
      • 2019-02-13
      • 2017-03-15
      • 1970-01-01
      • 2011-03-26
      • 1970-01-01
      • 2017-03-16
      相关资源
      最近更新 更多