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

CS50 Problem Set1 cash作业代码运行异常 求错误排查及解决方案

CS50 Problem Set1 cash作业代码问题排查

现有代码的错误点

  • 控制语句后存在多余分号:所有if、while关键字后都错误添加了分号,会直接导致控制逻辑失效。比如while (change_owed>=25);的分号会让while循环体变为空语句,只要条件成立程序就会卡死在该行,不会执行后续大括号内的扣减、计数逻辑。
  • while语法错误:处理5美分的while (change_owed>=5;c++;) 不符合C语言while语句语法规范,while括号内仅允许写循环条件表达式,计数逻辑c++应该放在循环体内部。
  • 冗余的if判断:每个while循环前的if判断属于多余逻辑,直接保留while循环即可覆盖所有符合条件的场景,无需额外提前判断。
  • 变量类型隐患:change_owed乘以100并取整后仍然存储为float类型,存在浮点数精度误差风险,建议转为int类型存储。
  • 输出不符合要求:代码中额外打印了转换为美分后的数值、硬币拆分计算过程,不符合作业仅输出最终硬币总数的要求。
  • 编译语法错误:main函数末尾多写了一个右大括号,会直接导致编译失败。

修正后可运行代码

#include <stdio.h>
#include <cs50.h>
#include <math.h>

int main(void)
{
    int quarters = 0;
    int dimes = 0;
    int nickels = 0;
    int pennies = 0;
    float change_input;
    do
    {
        change_input = get_float("Change owed: ");
    }
    while (change_input <= 0); 

    // 转为美分整数避免浮点数精度问题
    int change_cents = round(change_input * 100);

    while (change_cents >= 25)
    {
        change_cents -= 25;
        quarters++;
    }
    while (change_cents >= 10)
    {
        change_cents -= 10;
        dimes++;
    }
    while (change_cents >= 5)
    {
        change_cents -= 5;
        nickels++;
    }
    while(change_cents >= 1)
    {
        change_cents -= 1;
        pennies++;
    }
    int total = quarters + dimes + nickels + pennies;
    printf("%d\n", total);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 07:54:05