嵌套if实现薪资计算的C语言代码输出重复结果问题求助
问题分析与修复
你的代码出现多次输出薪资的核心问题有三个:
- 条件分支未互斥:三个独立的
if语句会依次判断,当输入满足多个条件时就会多次打印结果。比如输入5年时,第二个if(years<=2 || years>=4)和第三个if(years>=5)都会成立,导致输出两次薪资。 - 第二个条件逻辑错误:薪资规则中,2-4年(<5年且≥2年)对应蓝领12000、白领40000,但你写的
years<=2 || years>=4完全不符合这个规则,会错误覆盖1年、4年及以上的情况。 - 代码块未加括号:嵌套
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
相关产品推荐
相关产品推荐

