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

函数调用后变量值未更新:薪资计算程序逻辑异常求助

薪资计算程序的问题修复

核心问题分析

  • pay_rate函数逻辑完全混乱:
    • 条件判断顺序颠倒,应该先判断工时是否超过40小时,再处理超额部分,而非先判断≤40的情况。
    • temp初始化为0,导致后续0 < temp的分支永远无法触发,因为初始值不满足条件。
    • 工时计算逻辑错误:比如当hour≤40时,temp = hour-40会得到负数,完全不符合后续判断超额工时的需求。
  • total_pay函数逻辑错误:
    总薪资不能用单一rate乘以总工时,因为不同时段的时薪不同,必须分段计算。

修复后的完整代码

#include <stdio.h>

// 直接分段计算总薪资,逻辑更清晰
void calculate_total_pay(float hours, float* total_salary) {
    *total_salary = 0.0f;
    // 处理异常输入
    if (hours <= 0) {
        printf("工时不能为负数或零\n");
        return;
    }

    // 计算40小时内的基础薪资
    if (hours <= 40) {
        *total_salary = hours * 12.5f;
    } else {
        // 先算40小时的基础薪资
        *total_salary = 40 * 12.5f;
        float overtime = hours - 40;
        // 超额部分的前4小时按15元/小时计算
        if (overtime <= 4) {
            *total_salary += overtime * 15.0f;
        } else {
            // 前4小时按15元,剩余超额部分按20元计算
            *total_salary += 4 * 15.0f;
            *total_salary += (overtime - 4) * 20.0f;
        }
    }
}

int main() {
    float h, total_salary = 0;
    printf("Input worked hours: ");
    scanf("%f", &h);
    calculate_total_pay(h, &total_salary);
    printf("总薪资: %.2f\n", total_salary);
    return 0;
}

调整关键点说明

  1. 合并原有的pay_rate和total_pay函数为calculate_total_pay,因为分段时薪的场景下,单独计算单一rate没有意义,直接分段计算总薪资逻辑更清晰。
  2. 按「正常工时→超额前4小时→剩余超额工时」的顺序计算,逻辑符合薪资规则。
  3. 增加了异常输入判断,避免无效工时的计算错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 08:31:02