Home > Mobile >  `else if` condition not properly working in my program in c
`else if` condition not properly working in my program in c

Time:04-05

I am new and I don't know to to resolve this error.

When I give inputs for the third else if statement condition it gives the output as salary =0.

Can anyone explain why this happening?

I want to get the answer as :the salary of the candidate = 7000 but the output shows as : the salary of the candidate = 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  sex, y_o_s, qual, \n");
     scanf("%c\n%d\n%d", &sex, &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;
}

I want to get the answer as :the salary of the candidate = 7000 but the output shows as : the salary of the candidate = 0.

CodePudding user response:

Alter your if-else-if ladder like :

#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;
        }
     }

It's easier to follow. Notice, that constants like POST_GRAD are on the left side comparator ==, it helps compiler catch unintended typos like = for comparisons.

Also, you may want those salaries at one place like :

#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

When they change, you can find them at one place to modify.

PS: I wouldn't want to work at this place.

CodePudding user response:

You are assigning a value to gen

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

So when you get to your next line gen is no longer what you expect.

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

And then improve the code with SparKots suggestions.

  • Related