Algorithm problems in C

0

Does anyone know why the program simply closes when I type O ?

#include <stdio.h>
#include <locale.h> //Biblioteca locale é uitlizada para definar o idioma do programa.

int main()
{
    setlocale(LC_ALL,"Portuguese"); //Comando utilizado para caracteres especiais aparecerem.
    char turno,cargo;
    float sal_min,sal_bruto,horas,vlr_h,imposto,sal_liq;

    printf("Calculo de salário \n\n");
    printf("Digite o numéro de horas trabalhadas: ");
    scanf("%f",&horas);
    printf("Digite o valor do salário mínímo: ");
    scanf("%f",&sal_min);
    printf("\n\n");

    printf("Turnos de trablaho      Valor do coeficiente \n");
    printf("  Matutino - M          10%% do salário mínimo. \n");
    printf("  Vespertino - V        15%% do salário mínimo. \n");
    printf("  Noturno - N           10%% do salário mínimo. \n");

    printf("\n\n");
    printf("Com base na tebela digite a letra referente ao seu turno de trabalho: ");
    scanf("%s",&turno);
    printf("\n\n");

    switch (turno)
    {
//Maturino
    case 'm' :
        vlr_h = sal_min * 0.1;
        sal_bruto = vlr_h * horas;
        printf("Turno matutino \n");
        printf("   Seu salário bruto será de R$ %.2f.",sal_bruto);
        printf("\n\n");

        printf("Calculos de impostos \n\n ");
        printf("Cargos \n");
        printf("    O - Operário \n");
        printf("    G - Gerente \n\n");
        printf("Digite o codigo de seu cargo: ");
        printf("%s",&cargo);

        if (cargo == 'o') {
            if (sal_bruto >= 300)
            {
                imposto = sal_bruto *0.05;
                sal_liq = sal_bruto - imposto;
                printf("Seu salário liquido será de R$ %.2f",sal_liq);
                printf("\n \n");
            }
            else if (sal_bruto <300)
            {
                imposto = sal_bruto *0.03;
                sal_liq = sal_bruto - imposto;
                printf("Seu salário liquido será de R$ %.2f",sal_liq);
                printf("\n \n");
            }
        }
        break;
    
asked by anonymous 05.04.2018 / 00:16

2 answers

0
...
printf("Digite o codigo de seu cargo: ");
printf("%s",&cargo);/* Aqui deve ser a função scanf e não printf, ou se for
 printf tem que tirar o & depois da virgula*/
...
    
05.04.2018 / 13:29
0

In addition to the above suggested fixes, I suggest you use this line of code after scanf's. This will always consume everything in the buffer up to '\ n' and you will not have this problem.

while (getchar ()! = '\ n');

Your corrected code:

#include <stdio.h>
#include <locale.h> //Biblioteca locale é uitlizada para definar o idioma do 
programa.

int main()
{
setlocale(LC_ALL,"Portuguese"); //Comando utilizado para caracteres especiais aparecerem.
char turno,cargo;
float sal_min,sal_bruto,horas,vlr_h,imposto,sal_liq;

printf("Calculo de salário \n\n");
printf("Digite o numéro de horas trabalhadas: ");
scanf("%f",&horas);
while(getchar()!='\n');
printf("Digite o valor do salário mínímo: ");
scanf("%f",&sal_min);
while(getchar()!='\n');
printf("\n\n");

printf("Turnos de trablaho      Valor do coeficiente \n");
printf("  Matutino - M          10%% do salário mínimo. \n");
printf("  Vespertino - V        15%% do salário mínimo. \n");
printf("  Noturno - N           10%% do salário mínimo. \n");

printf("\n\n");
printf("Com base na tebela digite a letra referente ao seu turno de 
trabalho: ");
scanf("%c",&turno);
while(getchar()!='\n');
printf("\n\n");

switch (turno)
{
 //Maturino
  case 'm' :
    vlr_h = sal_min * 0.1;
    sal_bruto = vlr_h * horas;
    printf("Turno matutino \n");
    printf("   Seu salário bruto será de R$ %.2f.",sal_bruto);
    printf("\n\n");

    printf("Calculos de impostos \n\n ");
    printf("Cargos \n");
    printf("    O - Operário \n");
    printf("    G - Gerente \n\n");
    printf("Digite o codigo de seu cargo: ");
    scanf("%c",&cargo);
    while(getchar()!='\n');

    if (cargo == 'o') {
        if (sal_bruto >= 300)
        {
            imposto = sal_bruto *0.05;
            sal_liq = sal_bruto - imposto;
            printf("Seu salário liquido será de R$ %.2f",sal_liq);
            printf("\n \n");
        }
        else if (sal_bruto <300)
        {
            imposto = sal_bruto *0.03;
            sal_liq = sal_bruto - imposto;
            printf("Seu salário liquido será de R$ %.2f",sal_liq);
            printf("\n \n");
        }
    }
    break;
    }
}
    
07.04.2018 / 21:24