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

嵌套if实现薪资计算的C语言代码输出重复结果问题求助

问题分析与修复

你的代码出现多次输出薪资的核心问题有三个:

  1. 条件分支未互斥:三个独立的if语句会依次判断,当输入满足多个条件时就会多次打印结果。比如输入5年时,第二个if(years<=2 || years>=4)和第三个if(years>=5)都会成立,导致输出两次薪资。
  2. 第二个条件逻辑错误:薪资规则中,2-4年(<5年且≥2年)对应蓝领12000、白领40000,但你写的years<=2 || years>=4完全不符合这个规则,会错误覆盖1年、4年及以上的情况。
  3. 代码块未加括号:嵌套if的else没有和外层if用大括号包裹,虽然语法合法,但可读性极差,后续修改时容易引入bug。

修正后的代码

#include <stdio.h>
int main () {
    char kind;
    int years;

    // 输入部分
    printf("Enter years of work: ");
    scanf("%d",&years);
    printf("Enter kind of work: ");
    scanf(" %c",&kind);

    // 薪资计算逻辑(互斥分支)
    if (years < 2) {
        if (kind == 'B') {
            printf("Salary: 10,000\n");
        } else {
            printf("Salary: 20,000\n");
        }
    } else if (years < 5) {
        if (kind == 'B') {
            printf("Salary: 12,000\n");
        } else {
            printf("Salary: 40,000\n");
        }
    } else { // 5年及以上
        if (kind == 'B') {
            printf("Salary: 15,000\n");
        } else {
            printf("Salary: 75,000\n");
        }
    }

    return 0;
}

关键修改点

  • 使用else if构建互斥的条件分支,确保每个输入只会匹配一个薪资规则,避免多次输出。
  • 修正条件判断:将原本错误的years<=2 || years>=4改为符合规则的years <5(结合前面的else,实际代表2<=years<5)。
  • 给所有代码块添加大括号{},明确代码归属,提升可读性和可维护性。
  • 给输出添加换行符\n,让结果显示更整洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 07:12:39