我是新手,我不知道如何解決這個錯誤。
當我為第三個else if陳述句條件提供輸入時,它給出的輸出為薪水 = 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。
uj5u.com熱心網友回復:
改變你的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:我不想在這個地方作業。
uj5u.com熱心網友回復:
您正在為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的建議改進代碼。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/457701.html
上一篇:嘗試運行程式時出現語法錯誤
