Jump to content
Fórum Script Brasil
  • 0

Guilherme König
 Share

Question

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 to comment
Share on other sites

3 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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?

Edited by vangodp
Link to comment
Share on other 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Forum Statistics

    • Total Topics
      149.6k
    • Total Posts
      646.2k
×
×
  • Create New...