`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 的建议改进代码。
我是新手,不知道如何解决这个错误。
当我为第三个 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 的建议改进代码。