Doubts with the use of the IF / ELSE in C

2

When I run this code and type the gender = M or = F, all conditions are executed as expected. Already when I type sex = m or = f, only the first condition is met, regardless of the age value. Can anyone explain to me the right use and structure of IF / ELSE ?

int main()
{
    float salB, idade, medica;
    char sexo;

    printf("           PROGRAMA 2");
    printf("\n_________________________________");

    printf("\n\n Informe o sexo do funcionario, digite M para masculino ou F para feminino: ");
    scanf("%c",&sexo);
    fflush(stdin);
    printf("\n Digite o valor do salario bruto: ");
    scanf("%f",&salB);
    printf("\n Digite a idade: ");
    scanf("%f",&idade);

    if (sexo == 'm' || sexo == 'M' && idade < 20)
    {
        medica = (salB*5)/100;
        printf("\n O funcionario pagara R$%.2f de assistencia medica.",medica);
    }
    else
        if (sexo == 'm' || sexo == 'M' && idade >= 21 && idade < 40)
        {
            medica = (salB*7)/100;
            printf("\n O funcionario pagara R$%.2f de assistencia medica.",medica);
        }
        else
            if (sexo == 'm' || sexo == 'M' && idade > 40)
            {
                medica = (salB*10)/100;
                printf("\n O funcionario pagara R$%.2f de assistencia medica.",medica);
            }
            else
                if (sexo == 'f' || sexo == 'F' && idade < 20)
                {
                    medica = (salB*2)/100;
                    printf("\n A funcionaria pagara R$%.2f de assistencia medica.",medica);
                }
                else
                    if (sexo == 'f' || sexo == 'F' && idade >= 21 && idade < 40)
                    {
                        medica = (salB*5)/100;
                        printf("\n A funcionaria pagara R$%.2f de assistencia medica.",medica);
                    }
                    else
                        if (sexo == 'f' || sexo == 'F' && idade > 40)
                        {
                            medica = (salB*7)/100;
                            printf("\n A funcionaria pagara R$%.2f de assistencia medica.",medica);
                        }
                        else
                            printf("\n Sexo invalido, tente novamente.");



        system("pause > null");
}
    
asked by anonymous 07.09.2018 / 09:06

2 answers

1

I have some points that I wanted to help you beyond the good answer, your age control does not control when the age is 20 or 40 and when it is negative (because there is no negative age).

I rewrote the code so that the logic became clearer by first managing sex and then age (I did not change the logic of age = 20 or = 40):

int main()
{
    float salB, idade, medica;
    char sexo;

    printf("           PROGRAMA 2");
    printf("\n_________________________________");

    printf("\n\n Informe o sexo do funcionario, digite M para masculino ou F para feminino: ");
    scanf("%c",&sexo);
    fflush(stdin);
    printf("\n Digite o valor do salario bruto: ");
    scanf("%f",&salB);
    printf("\n Digite a idade: ");
    scanf("%f",&idade);
    // controle para homens
    if (sexo == 'm' || sexo == 'M')
    { 
        if(idade < 20){
            medica = (salB*5)/100;
            printf("\n O funcionario pagara R$%.2f de assistencia medica.",medica);
        }
        else if(idade >= 21 && idade < 40){
            medica = (salB*7)/100;
            printf("\n O funcionario pagara R$%.2f de assistencia medica.",medica);
        }
        else if(idade > 40){
            medica = (salB*10)/100;
            printf("\n O funcionario pagara R$%.2f de assistencia medica.",medica);
        }
    }
    // controle para mulheres
    else if(sexo == 'f' || sexo == 'F'){
        if(idade < 20){
            medica = (salB*2)/100;
            printf("\n A funcionaria pagara R$%.2f de assistencia medica.",medica);
        }
        else if(idade >= 21 && idade < 40){
            medica = (salB*5)/100;
            printf("\n A funcionaria pagara R$%.2f de assistencia medica.",medica);
        }
        else if(idade > 40){
            medica = (salB*7)/100;
            printf("\n A funcionaria pagara R$%.2f de assistencia medica.",medica);
        }
    }
    else{
        printf("\n Sexo invalido, tente novamente.");
    }
        system("pause > null");
}

It also has a performance question, your code does a lot of control, I say, first if it is woman and age under 20, then if it is woman and age between a period of age, then if it is woman and age greater what forty Well, you do a lot of control and lose some performance.

What I did was, it makes a control to see the sex, and then it makes the control to see the age, at worst give hypothesis my code makes 4 controls. Yours at worst makes 6. I know it's a small gain, but gain is always earned.

I hope I have helped!

    
07.09.2018 / 10:23
1

You have two options, one would be to make a ToUpper and compare only with 'M' instead of m or M

The second option is as follows:

 if ((sexo == 'm' || sexo == 'M') && idade < 20)

It would look like this: if the gender is m OR M, and the age < 20 The parentheses are very important for you to isolate that condition.

    
07.09.2018 / 09:16