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

C语言找零程序变量出现异常值原因排查求助

找零程序异常值问题排查

编写了一个使用重复if语句的找零程序,但输入45时,原本应为0的Nickles和Pennies变量出现极大异常值,实际输出包含错误数值,期望仅输出1 Quarter和2 Dimes。相关代码、输入输出如下:

程序代码

#include <stdio.h>

int main(void) {

   int a;
   int b;
   int c;
   int d;
   int e;
   int cha;
   
   scanf("%d", &cha);
   
   if(cha == 0){
      printf("No change\n");
      return 0;
   }   
   if(cha >= 100){
      a = cha / 100;
      cha = cha % 100;
   }
   if(100> cha && cha >= 25){
      b = cha / 25;
      cha = cha % 25;
   }
   if(25 > cha && cha >= 10){
      c = cha / 10;
      cha = cha % 10;
   }
   if(10 > cha && cha >= 5){
      d = cha / 5;
      cha = cha % 5;
   }
   if(5 > cha && cha >= 1){
      e = cha;
   }
   if(a == 1){
      printf("%d Dollar\n",a);
   }
   if(a > 1){
      printf("%d Dollars\n",a);
   }
   if(b == 1){
      printf("%d Quarter\n",b);
   }
   if(b > 1){
      printf("%d Quarters\n",b);
   }
   if(c == 1){
      printf("%d Dime\n",c);
   }
   if(c > 1){
      printf("%d Dimes\n",c);
   }
   if(d == 1){
      printf("%d Nickle\n",d);
   }
   if(d > 1){
      printf("%d Nickles\n",d);
   }
   if(e == 1){
      printf("%d Penny\n",e);
   }
   if(e > 1){
      printf("%d Pennies\n",e);
   }
   return 0;
}

输入示例

45

程序输出

1 Quarter
2 Dimes
875483616 Nickles
32766 Pennies

期望输出

1 Quarter
2 Dimes

问题原因

C语言中,未初始化的局部变量会保留内存空间中的随机垃圾值。输入45时:

  • 经过计算,cha最终变为0,因此d(对应Nickles)和e(对应Pennies)的赋值条件都不会触发,这两个变量始终未被赋值,保留了内存中的随机值。
  • 后续输出判断时,这些随机值恰好大于1,导致错误输出了异常的Nickles和Pennies数量。

修复方案

有两种简单的修复方式:

  1. 初始化所有变量为0
    在声明变量时直接赋值初始值,确保未触发赋值条件的变量默认值为0:

    int a = 0;
    int b = 0;
    int c = 0;
    int d = 0;
    int e = 0;
    int cha;
    
  2. 输出前先判断变量是否大于0
    在输出每个币种的判断前,先检查变量是否大于0,仅当有对应数量的币种时才输出:
    例如针对Nickles的输出修改为:

    if(d > 0){
        if(d == 1){
            printf("%d Nickle\n",d);
        } else {
            printf("%d Nickles\n",d);
        }
    }
    

    同理修改Pennies及其他币种的输出逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 12:16:32