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

计时工薪资计算C代码逻辑错误排查(多输入计算异常)

计时工薪资计算代码逻辑错误排查

核心错误点

  • 时间单位完全搞反:代码把用户输入的每周工时除以4来计算每月工时,这完全违背需求逻辑。需求明确每月正常工时20小时、最多加班20小时,若用户输入的是每周工时,正确转换应该是乘以4得到每月工时,而不是除以4。这是多用户计算异常的根本原因。
  • 整数截断丢失精度:hoursWorked是整数类型,执行hoursWorked = hoursWorked /4.0时,浮点数结果会被强制截断为整数(比如每周21小时会被算成每月5小时,实际应为5.25小时),直接导致薪资计算偏差。
  • 平均薪资累加逻辑冗余混乱:hAverage重复乘以4,且当工时超出正常范围时固定累加4*20*hourly,和需求中“正常薪资”的定义不匹配,进一步放大多用户计算的误差。

修正后的关键代码示例

case 'h':
case 'H':
    overtimeHours = 0;
    hoursWorked = 0;
    hourly = 0.0;
    salary = 0;
    puts("Please enter your hourly wage and hours worked.");
    scanf(" %f %d", &hourly, &hoursWorked);
    
    // 修正:假设输入的是每周工时,转换为每月工时(乘以4)
    float monthlyHours = hoursWorked * 4.0;
    int regularHours = 0;
    int overtime = 0;

    if (monthlyHours > 40) {
        // 每月总工时上限40:20正常+20加班
        regularHours = 20;
        overtime = 20;
    } else if (monthlyHours > 20) {
        regularHours = 20;
        overtime = monthlyHours - 20;
    } else {
        regularHours = monthlyHours;
        overtime = 0;
    }

    // 计算总薪资和正常薪资累加
    hTotal += regularHours * hourly + overtime * hourly * 1.25;
    hAverage += regularHours * hourly;
    hCounter++;
    break;

修正说明

  1. 修正时间单位转换逻辑,确保每月工时计算正确;
  2. 使用float类型存储每月工时,避免整数截断导致的精度丢失;
  3. 简化薪资计算逻辑,让正常工时和加班工时的划分更清晰,多用户累加时不会出现逻辑冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 12:55:37