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

C语言ATM取款代码修复:实现仅5的倍数取款金额进入if分支

问题根因

原代码的if判断逻辑存在两处核心问题:

  • x / 5的判定逻辑完全错误:C语言中非0值会被识别为布尔真,只要输入的取款金额不为0,不管是否是5的倍数,该条件都会判定为成立,无法完成倍数校验。
  • 缺少取款金额为正数的校验,用户输入负数时也会被判定为合法。
修复方案

将if判断条件替换为同时满足以下三个规则的逻辑:

  1. 取款金额为正
  2. 取款金额是5的倍数
  3. 取款金额不超过账户余额
    针对ATM取款场景默认仅支持整数元取款的规则,我们可以将浮点数转为整数后做取模运算判断倍数,避免浮点数精度问题。
完整修复代码
#include <stdio.h>
int main(void)
{
    float x;
    // 初始账户余额2000元
    float y = 2000;
    printf("Instruction: This ATM accepts values which are multiple of 5 \n");
    printf("Enter the amount to withdraw: \n");
    scanf("%f", &x);
    // 修正后的判断条件:金额为正、是5的倍数、余额充足
    if ((int)x > 0 && (int)x % 5 == 0 && x <= y)
    {
        float z = y - x;
        // 扣除0.5元手续费
        float a = z - 0.5;
        printf("Your Transaction is successful\n\n");
        printf("Your Account Balance is %f\n\n", a);
    }
    else
    {
        printf("Error: %f\n\n", x);
        printf("Read the Instruction carefully\n\n");
    }
    return 0;
}
补充说明

如果需要支持带角分的取款校验,可以引入<math.h>库,使用浮点数取余函数做判断,对应判断条件改为:
x > 0 && fabs(fmod(x, 5)) < 1e-6 && x <= y

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 18:24:03