Ir para conteúdo
Fórum Script Brasil
  • 0

Guilherme König

Pergunta

Boa noite gente. Estou há um tempo quebrando a cabeça nesse exercício da universidade e ficaria muito grato se alguém pudesse me ajudar:

Uma empresa irá dar um aumento de salário aos seus funcionários de acordo com a categoria de cada empregado. O aumento seguirá a seguinte regra:

Funcionários das categorias A, C, F, e H ganharão 10% de aumento sobre o salário;

Funcionários das categorias B, D, E, I, J e T ganharão 15% de aumento sobre o salário;

Funcionários das categorias K e R ganharão 25% de aumento sobre o salário;

Funcionários das categorias L, M, N, O, P, Q e S ganharão 35% de aumento sobre o salário;

Funcionários das categorias U, V, X, Y, W e Z ganharão 50% de aumento sobre o salário.

Faça um algoritmo que escreva nome, categoria e salário reajustado de cada empregado.

 

Meu código não está funcionando e não sei o motivo:

#include <stdio.h>
#include <conio.h>
#include <locale.h>
int main ()
{
setlocale(LC_ALL,"Portuguese");

char name[18];
float sal, au;
int cat;

printf ("Digite seu nome: ");
scanf("%s", &name);

printf ("Se você se enquadra nas categorias:\n Categorias: A-C-F-H - DIGITE 1.\n Categorias: B-D-E-I-J-T DIGITE 2.\n Categorias: K-R - DIGITE 3. \n Categorias:L-M-N-O-P-Q-S - Digite 4.\n Categorias: U-V-X-Y-W-Z - Digite 5: ");
scanf ("%d", &cat);

printf ("Digite seu salário atual: ");
scanf ("%f", &sal);

switch(cat)
{
    case '1': au=((sal)+(sal*0.1));
printf ("O funcionário %s, de categoria %s terá um salário de %f\n",name,cat,au);
break;
    case '2': au=((sal)+(sal*0.15));
printf ("O funcionário %s, de categoria %s terá um salário de %f\n",name,cat,au);
break;
    case '3': au=((sal)+(sal*0.25));
printf ("O funcionário %s, de categoria %s terá um salário de %f\n",name,cat,au);
break;
    case '4': au=((sal)+(sal*0.35));
printf ("O funcionário %s, de categoria %s terá um salário de %f\n",name,cat,au);
break;
    case '5': au=((sal)+(sal*0.50));
printf ("O funcionário %s, de categoria %s terá um salário de %f\n",name,cat,au);
break;
default: printf ("Periodo invalido");
}
return 0 ;
}

____________________________________________________________________________________

Valeu gente, não faço ideia do que pode estar errado

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

Olhando não está evidente aonde está falhando, porém só de eu mudar o comando switch para um alinhamento de if e else if FUNCIONOU.

Pode ser algum erro dentro do switch que não está evidente.

veja só como funciona:
 

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
int main ()
{
//setlocale(LC_ALL,"Portuguese");

char name[18];
float sal;
int ct;

printf ("Digite seu nome: ");
scanf("%s", name);

printf ("Se você se enquadra nas categorias:\n Categorias: A-C-F-H - DIGITE 1\n");
printf ("Categorias: B-D-E-I-J-T DIGITE 2\n");
printf ("Categorias: K-R - DIGITE 3\n");
printf ("Categorias:L-M-N-O-P-Q-S - Digite 4\n");
printf ("Categorias: U-V-X-Y-W-Z - Digite 5\n");

printf("\nDigite o número correspondente a categoria: ");
scanf ("%d", &ct);

printf ("\n\n");

printf ("Digite seu salário atual: ");
scanf ("%f", &sal);

if (ct==1)
   printf ("\n\nO funcionário %s, de categoria %d terá um salário de %f\n",name,ct,sal+(sal*0.1));

else if (ct==2)
    printf ("\n\nO funcionário %s, de categoria %d terá um salário de %f\n",name,ct,sal+(sal*0.15));

else if (ct==3)
    printf ("\n\nO funcionário %s, de categoria %d terá um salário de %f\n",name,ct,sal+(sal*0.25));

else if (ct==4)
    printf ("\n\nO funcionário %s, de categoria %d terá um salário de %f\n",name,ct,sal+(sal*0.35));

else if (ct==5)
    printf ("\n\nO funcionário %s, de categoria %d terá um salário de %f\n",name,ct,sal+(sal*0.50));


else

 printf ("Periodo invalido");



return 0 ;

}

 

E não use a biblioteca conio, já não faz parte do padrão C. É antiga, códigos obsoletos e etc. 

Link para o comentário
Compartilhar em outros sites

  • 0

case '1': é char, e cat é int, o correto seria  case 1: e não  case '1': , sem as aspas simples.

O que esta acontecendo é que ao comparar cat com '1' você está comparando cat que é um int com o valor asc2 do carácter '1', se quando no scanf perguntar a categoria você colocar 49 dai você entra no case '1':, isso por que na tabela asc2 o char '1' vale 49. Falou?

Editado por vangodp
Link para o comentário
Compartilhar em outros sites

  • 0

Exato vangodp! Eu não tinha reparado nesse detalhe. Aspas simples é para char mesmo. 

 

Do resto, incluir stdio.h e retirar conio.h, nessa parte:

printf ("Digite seu nome: ");
scanf("%s", &name);

retirar o & comercial, pois a string é um array de caractere e o seu nome já é o índice para localizar.

E corrigir a impressão dos tipos no printf:

 

case '1': au=((sal)+(sal*0.1));
printf ("O funcionário %s, de categoria %d terá um salário de %f\n",name,cat,au);
break;
    case '2': au=((sal)+(sal*0.15));
printf ("O funcionário %s, de categoria %d terá um salário de %f\n",name,cat,au);
break;
    case '3': au=((sal)+(sal*0.25));
printf ("O funcionário %s, de categoria %d terá um salário de %f\n",name,cat,au);
break;
    case '4': au=((sal)+(sal*0.35));
printf ("O funcionário %s, de categoria %d terá um salário de %f\n",name,cat,au);
break;
    case '5': au=((sal)+(sal*0.50));
printf ("O funcionário %s, de categoria %d terá um salário de %f\n",name,cat,au);
break;
default: printf ("Periodo invalido")

 

 

Assim funcionará. Fui.

 

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...