You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何将total赋值语句放在注释位置时输出始终为16?

为什么把total = num_1 + num_2;放在注释位置时,求和结果始终是16?

我希望启用代码中注释位置的total = num_1 + num_2 ;语句,但无论输入什么数值,输出的求和结果始终为16,请问这是什么原因?相关代码如下:

#include <stdio.h>
int main()
{
    int num_1, num_2, total ;

    // If "total = num_1 + num_2 ;" is here then everytime it shows the sum is 16....WHY ?

    printf("Please enter num_1 : ") ;
    scanf("%d", &num_1);

    printf("\nPlease enter num_2 : ") ;
    scanf("%d", &num_2) ;

    printf("\nThe sum is : %d\n", total) ;
    total = num_1 + num_2 ;

    return 0 ;
}

原因解析

这是典型的未初始化局部变量导致的垃圾值问题:

  • 当你把total = num_1 + num_2;移到注释位置时,这条语句执行时num_1和num_2还没有通过scanf获取用户输入的值。在C语言中,未初始化的局部变量会保留栈内存中的随机残留数据(也就是所谓的垃圾值)。
  • 你每次得到16只是巧合——换个编译器、操作系统或者运行环境,结果可能变成其他随机数字。
  • 后续的scanf确实读取了用户输入,但此时total的计算已经完成,输入的数值根本没参与求和,最后打印的还是用垃圾值算出来的结果。

修正方案

把total = num_1 + num_2;移到两次scanf之后、打印total之前,确保计算时num_1和num_2已经被正确赋值:

#include <stdio.h>
int main()
{
    int num_1, num_2, total ;

    printf("Please enter num_1 : ") ;
    scanf("%d", &num_1);

    printf("\nPlease enter num_2 : ") ;
    scanf("%d", &num_2) ;

    total = num_1 + num_2 ; // 移到这里,确保变量已赋值
    printf("\nThe sum is : %d\n", total) ;

    return 0 ;
}

内容的提问来源于stack exchange,提问作者slim_shaddy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 00:51:19