Problems in C algorithm

Asked

Viewed 81 times

0

Can anyone tell why the program simply closes when I type the The?

#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;
  • 2

    Char reading is done with %c and not %s. Start there

  • changed %s to %c but now even case m does not run more.

  • This has to do with whether or not the previous readings consume the \n, that in this case the %f does not consume. Make room before the %c, thus: scanf(" %c",&turno);

2 answers

0

In addition to the previously suggested corrections I suggest you use this line of code after the scanf’s. This way it always consumes everything that is inserted in the buffer until the ' n' and you will not have this problem.

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

Your code is corrected:

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

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*/
...

Browser other questions tagged

You are not signed in. Login or sign up in order to post.