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

C语言美元找零程序输出异常问题排查求助

找零程序修复方案

核心问题说明

  • 变量传递错误:main函数中定义的cents未初始化,user_change内的cents是局部变量,无法被外部直接访问,且函数没有返回计算得到的美分数值,导致传入user_cents的是随机垃圾值,出现异常的大额数字输出。
  • 1元纸币计算逻辑错误:拆分完5元面值后剩余的updated_amt本身就是1元纸币的数量,原有代码错误执行dollar_bills = updated_amt / 100,计算结果必然为0,不符合预期。
  • 美分转换逻辑错误:美分计算时需要将小数部分乘以100而非10,同时user_cents参数类型为int,传入浮点型小数会导致精度丢失。
  • 函数返回值逻辑缺失:user_change声明了double类型返回值,但函数内没有return语句,main中也没有接收返回结果。

修复后完整代码

#include <stdio.h>

// 函数返回剩余的美分数值
double user_change(double);
void user_cents(double cents);

int main() {
    double user_amt, cents;
    printf("Hello User!\n\nHow much money would you like change for?\nEnter any amount: $");
    scanf("%lf", &user_amt);
    // 接收返回的美分数值
    cents = user_change(user_amt);
    user_cents(cents);
    return 0;
}

double user_change (double user_amt)
{
    int updated_amt = (int) user_amt;
    int hundreds, fifties, tens, fives, dollar_bills;
    double cents = user_amt - updated_amt;

    hundreds = updated_amt / 100;
    updated_amt %= 100;

    fifties = updated_amt / 50;
    updated_amt %= 50;

    tens = updated_amt / 10;
    updated_amt %= 10;

    fives = updated_amt / 5;
    updated_amt %= 5;
    
    // 剩余金额就是1元纸币数量
    dollar_bills = updated_amt;
    printf("\nDollar Bills: %d\n", dollar_bills);
    // 返回美分部分
    return cents;
}

void user_cents(double cents)
{
    // 乘以100转成整数美分,加0.5避免浮点数精度误差
    int balance = (int)(cents * 100 + 0.5);
    int quarters, dimes, nickels, pennies;
    quarters = balance / 25;
    balance %= 25;

    dimes = balance / 10;
    balance %= 10;

    nickels = balance / 5;
    balance %= 5;

    pennies = balance;
    printf("Quarters: %d\nDime: %d\nNickel: %d\nPennies: %d\n", quarters, dimes, nickels, pennies);
}

运行验证

输入4.67后即可得到与预期一致的输出:

Dollar Bills: 4
Quarters: 2
Dime: 1
Nickel: 1
Pennies: 2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 22:27:00