Logo Hardware.com.br
Rickkdinho
Rickkdinho Novo Membro Registrado
30 Mensagens 2 Curtidas

Programa em C que calcula salário pelo cargo

#1 Por Rickkdinho 28/10/2017 - 17:00
Estou fazendo um exercicio pra faculdade,onde tenho que fazer o seguinte:leia o cargo e o salário de um profissional. Calcule e imprima o novo salário conforme opções abaixo:
Caso cargo = técnico à acréscimo de 1,5%
Caso cargo = gerenteà acréscimo de 1,3%
Para qualquer outro cargo à acréscimo de 1,1%
Pórem n estou conseguindo fazer,poderiam me ajudar achar onde está o erro?Obg

[HASHTAG]#include[/HASHTAG]
[HASHTAG]#include[/HASHTAG]
[HASHTAG]#include[/HASHTAG]
int main ()
{
setlocale(LC_ALL,"portuguese");
char cargo;
float sal,novosal;
printf ("Digite seu cargo:");
scanf ("%c",&cargo);
printf ("Digite seu salário:");
scanf ("%f",&sal);
if (cargo == 'Técnico'|| 'técnico');
{
novosal = sal * 1.5;
printf ("Seu novo salário é de:%f \n",novosal);
}
else
if (cargo == 'Gerente'|| 'gerente');
{
novosal = sal * 1.3;
printf ("Seu novo salário é de:%f \n",novosal);
}
else
{
novosal = sal * 1.1;
printf ("Seu novo salário é de:%f \n",novosal);
}
system ("pause");
return 0;
}
Caio_Br
Caio_Br Super Participante Registrado
192 Mensagens 125 Curtidas
#4 Por Caio_Br
28/10/2017 - 17:32
Rickkdinho disse:

Pelo o que eu percebi as condições estão terminando com o ';' como por exemplo esta : if (cargo == 'Gerente'|| 'gerente'); . Retire esse ponto e vírgula.
-E só mais uma coisa, como você está usando char normal, e como os if estão usando Strings? O correto, se eu não estiver enganado, seria fazer um vetor de char, por exemplo, um com 20 posições "char[20], e colocar o %s ao em vez de %c nos Scanf's.
Caio_Br
Caio_Br Super Participante Registrado
192 Mensagens 125 Curtidas
#7 Por Caio_Br
28/10/2017 - 17:43
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
int main ()
{
setlocale(LC_ALL,"portuguese&quot;
char cargo[20]; //estou usando um vetor de 20 posições que variam entre 0 e 19
float sal,novosal;
printf ("Digite seu cargo:&quot;
scanf ("%s",cargo); //estou usando %s que serefere a Strings
printf ("Digite seu salário:&quot;
scanf ("%f",&sal);
if (cargo == "Tecnico"|| cargo == "tecnico&quot //acho melhor nao usar muito acentuações em desenvolvimento // usa-se aspas duplas para strings e aspas simples para caracteres
{
novosal = sal * 1.5;
printf ("Seu novo salário é de:%f \n",novosal);
}
if (cargo == "Gerente"|| cargo == "gerente&quot
{
novosal = sal * 1.3;
printf ("Seu novo salário é de:%f \n",novosal);
}else{
novosal = sal * 1.1;
printf ("Seu novo salário é de:%f \n",novosal);
}
system ("pause&quot;
return 0;
}

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
int main ()
{
setlocale(LC_ALL,"portuguese&quot;
char cargo[20]; //estou usando um vetor de 20 posições que variam entre 0 e 19
float sal,novosal;
printf ("Digite seu cargo:&quot;
scanf ("%s",cargo); //estou usando %s que serefere a Strings
printf ("Digite seu salário:&quot;
scanf ("%f",&sal);
if (cargo == "Tecnico"|| cargo == "tecnico&quot //acho melhor nao usar muito acentuações em desenvolvimento // usa-se aspas duplas para strings e aspas simples para caracteres
{
novosal = sal * 1.5;
printf ("Seu novo salário é de:%f \n",novosal);
}
if (cargo == "Gerente"|| cargo == "gerente&quot
{
novosal = sal * 1.3;
printf ("Seu novo salário é de:%f \n",novosal);
}else{
novosal = sal * 1.1;
printf ("Seu novo salário é de:%f \n",novosal);
}
system ("pause&quot;
return 0;
}


Verifique se o resultado final bate com o que você precisa. Qualquer coisa é só perguntar.
Espero ter ajudado, Boa tarde e Boa Sorteee!
jqueiroz
jqueiroz Cyber Highlander Registrado
104K Mensagens 5.7K Curtidas
#10 Por jqueiroz
30/10/2017 - 13:06
Eliseu F A Jr disse:

Não confunda "char" (um caracter) com "char []" (vetor de caracteres) nem com "char *" (ponteiro para caracteres).

Quando se tem uma variável do tipo "char", é preciso sim usar o "&" na scanf(), pois esta função recebe como parâmetros ponteiros para as variáveis, não o valor delas.

Já quando se tem uma variável do tipo vetor ou ponteiro, normalmente não se usa o "&" na scanf(), pois já temos um ponteiro pros dados.


Enviado do meu smartphone
"chmod 777 nunca ajudou ninguém" (c) 2002-2021 JQueiroz/FGdH
Conheça o Blog do Zekke
Eliseu F A Jr
Eliseu F A J... Geek Registrado
776 Mensagens 354 Curtidas
#11 Por Eliseu F A J...
30/10/2017 - 16:46
Certo, @jqueiroz, muito bom.
Acho que quando se cria uma int automaticamente se cria um ponteiro, pois, seu valor é 0.0
Mas para uma char não, pois ela fica vazia.

Poder-se usar o & scanf/char, se declarando um ponteiro para a string?
ex: char cargo[20]; ou char * cargo
jqueiroz
jqueiroz Cyber Highlander Registrado
104K Mensagens 5.7K Curtidas
#12 Por jqueiroz
30/10/2017 - 17:21
Eliseu F A Jr disse:

Desculpe, não entendi. Não é um "int"? Então o valor dela, se fosse inicializado, seria "0", não "0.0", que é uma constante do tipo "double". wink.png

Mas para uma char não, pois ela fica vazia.

Vamos lá... pq eu destaquei lá em cima o "se fosse inicializado"??? Pq normalmente as variáveis C não são inicializadas automaticamente.
Única exceção que eu lembro: variáveis globais declaradas como estáticas. Tipo:

[code="C"]#include
static char c;
static int i;
void main(int ac, char *av[]) {
printf( "Hello, World!\n");
printf( "c = "%c" (%d), i=%d\n", c, c, i );
}
[/code]

Quanto à possibilidade de uma variável escalar ficar vazia... qualquer que seja o tipo dela, char, int, float, enum... ela nunca vai estar vazia; sempre vai ter um valor. O que pode acontecer, no entanto, é que alguns dos valores que essas variáveis podem assumir não podem ser impressos. É o caso, por exemplo, do valor "NaN" para as variáveis de ponto flutuante, e dos caracteres não-imprimíveis ("non-printable characters"). Apenas os valores entre 32 e 126 (a chamada "Tabela ASCII") estão definidos com uma representação imprimível. Valores entre 127 e 256 podem ter interpretações diferentes, conforme o conjunto de caracteres em uso, e os valores entre 0 e 31 são os chamados "caracteres de controle", e apesar de poderem alterar a forma como a impressão vai ocorrer (ex. caracteres com valores 8, 10 e 13), eles mesmo quase nunca serão impressos. Por isso você pode ter pensado que seu "char" estava vazio.

Poder-se usar o & scanf/char, se declarando um ponteiro para a string?
ex: char cargo[20]; ou char * cargo

Você só pode usar o "&" com um ponteiro, não pode usar com um vetor.
Quando você aplica o "&" ao ponteiro, você obtém de volta um ponteiro para um ponteiro (no caso, um "char **").
Já quando você referencia o nome do vetor, na verdade você está recebendo um valor constante, que é o endereço da primeira posição do vetor. E por ser uma constante, você não pode obter o endereço dela.

Dica: tente entender as diferenças entre ponteiro e vetor. O código abaixo pode te ajudar um pouco.

[code="C"]
#include
void main(int ac, char *av[]) {
char str[20]="Hello, World!\n";
char *ptr = str;
int i;
for( i = 0; i<20; i++, ptr++ ) {
printf( "%d - %c (%d) / %c (%d)\n", i, str[i], str[i], *ptr, *ptr );
}
}
[/code]
"chmod 777 nunca ajudou ninguém" (c) 2002-2021 JQueiroz/FGdH
Conheça o Blog do Zekke
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal