`else if` 条件在我的 c 程序中不能正常工作

`else if` condition not properly working in my program in c

我是新手,不知道如何解决这个错误。

当我为第三个 else if 语句条件提供输入时,它给出的输出为 salary =0.

谁能解释为什么会这样?

我想得到的答案是:候选人的薪水 = 7000 但输出显示为:候选人的薪水 = 0

/******************* calculating the salary *********************/
/***** bitwise operator ***********/

#include <stdio.h>

int main()
{
     char gen;
     int qual, y_o_s, sal = 0 ;
     printf ( "Enter Gender, Years of Service and Qualifications ( 0 = G, 1 = PG ):\n" );
     printf("enter the  gen, y_o_s, qual, \n");
     scanf("%c\n%d\n%d", &gen, &y_o_s, &qual);

     if (gen == 'M' && y_o_s >= 10 && qual == 1)
       sal = 15000;
     else if ((gen == 'M' && y_o_s >= 10 && qual == 0) || 
         (gen = 'M' && y_o_s < 10 && qual == 1))
       sal = 10000;
     else if (gen == 'M' && y_o_s < 10 && qual == 0)
       sal = 7000;
     else if (gen == 'F' && y_o_s >= 10 && qual == 1)
       sal= 12000;
     else if (gen == 'F' && y_o_s >= 10 && qual == 0)
       sal = 9000;
     else if (gen == 'F' && y_o_s < 10 && qual == 1)
       sal = 10000;
     else if (gen == 'F' && y_o_s >= 10 && qual == 0)
       sal = 6000;

    printf("the salary of the candidat = %d\n", sal);

     return 0;
}

我想得到的答案是:候选人的薪水 = 7000 但输出显示为:候选人的薪水 = 0.

像这样改变你的 if-else-if 阶梯:

#define POST_GRAD 1
#define SEX_MALE  'M'
     
     if (SEX_MALE == gen) {
        if (POST_GRAD == qual) {
            sal = (y_o_s >= 10) ? 15000 : 10000;
        } else { // undergrad
            sal = (y_o_s >= 10) ? 10000 : 7000;
        }
     } else { // not Male
        if (POST_GRAD == qual) {
            sal = (y_o_s >= 10) ? 12000 : 10000;
        } else { // undergrad
            sal = (y_o_s >= 10) ? 9000 : 6000;
        }
     }

更容易理解。请注意,像 POST_GRAD 这样的常量位于比较器 == 的左侧,它有助于编译器捕获意外的拼写错误,如 = 以进行比较。

此外,您可能希望这些薪水集中在一个地方,例如:

#define MALE_PG_EXP_SAL 15000
#define MALE_UG_EXP_SAL 10000
// and so on
#define FEMALE_UG_EXP_SAL 9000
#define FEMALE_UG_INEXP_SAL 6000

当它们发生变化时,您可以在一处找到它们进行修改。

PS:我不想在这个地方工作。

您正在为 gen

赋值
else if ((gen == 'M' && y_o_s >= 10 && qual == 0) || 
  (gen = 'M' && y_o_s < 10 && qual == 1))
       ^ 

因此,当您到达下一行时,gen 不再是您所期望的。

else if (gen == 'M' && y_o_s < 10 && qual == 0)
             ^^

然后根据 SparKot 的建议改进代码。