Como reconhcer o valor digitado?

1. Como reconhcer o valor digitado?

Joao Alves Nunes
joao76

(usa Solaris)

Enviado em 13/09/2013 - 15:19h


No código abaixo quando digitado "m" na solicitação do sexo é calculado erroneamente 3% ao invés de 5%. Por que não reconhece que a variável sexo="m" ???
Agradeço antecipadamente...

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main(void)
{
char matr[10],sexo[2];
float sal, desc, saliq;
system ("cls");
printf("Matricula:");
fgets(matr,10,stdin);
printf("Sexo.....:");
scanf("%2[^\n]", sexo);
scanf("%*[^\n]");
scanf("%*c");
printf("Salario..:");
scanf("%f",&sal);
if (sexo=="m")
desc=sal*0.05;
else
desc=sal*0.03;
saliq=sal-desc;
printf("Desconto...... : %.2f\n",desc);
printf("Salario Liquido: %.2f\n",saliq);
system("pause");
}

system("pause");


  


2. Re: Como reconhcer o valor digitado?

wellington
wellingtonsr

(usa Slackware)

Enviado em 13/09/2013 - 15:42h

Veja:


#include<stdio.h>
#include<string.h>
#include<stdlib.h>

int main(void){

char matr[10],sexo; <----------como sexo vai ter só um caractere não presia ser um vetor
float sal, desc, saliq;

system ("cls");
printf("Matricula:");
fgets(matr,10,stdin);
printf("Sexo.....:");
scanf("%[^\n]", &sexo);
scanf("%*[^\n]");
scanf("%*c");
printf("Salario..:");
scanf("%f",&sal);

if (sexo == 'm') <----------------use aspas simples, no lugar de duplas que são para string
desc = sal * 0.05;
else
desc = sal * 0.03;
saliq=sal-desc;


printf("Desconto...... : %.2f\n",desc);
printf("Salario Liquido: %.2f\n",saliq);

system("pause");
return 0;

}





3. Re: Como reconhcer o valor digitado?

Clodoaldo Peres
clodoaldoPeres

(usa Ubuntu)

Enviado em 13/09/2013 - 17:49h

Olha vou dar minha opinião e sugestão, não que ela seja a melhor mas creio que pode ajudar:

#include<string.h>
#include<stdlib.h>
#include<stdio.h>
int main(void)
{
char matr[10],sexo[2];
float sal, desc, saliq;
//system ("cls"); //1-chamada de sistema válida para windows e não
// não vejo utilidade aqui
printf("Matricula:");//2-usar puts("Matricula") é o indicado para
//imprimir somente strings
//(a não ser que não deseje salto de linha),além de
//ser mais rápido como neste caso
//(OBS: puts imprime a string e coloca um salto de
// linha seguido,e escreve somente strings, não
//escreve numeros nem faz conversão de formato)
fgets(matr,10,stdin);//3-usar gets(matr) -> lê do teclado e insere em
//matr até que o retorno de carro seja pressionado.
//O CR não se torna parte da string em seu lugar vai
//um terminador nulo
printf("Sexo.....:");//4-idem item 2
scanf("%2[^\n]", sexo);//aqui,como percebo que está usando windows,você
//pode usar getch() e pegar o retorno,afinal se vc
//quer somente 'm' ou 'f'
//naum precisa ser uma matriz ou ponteiro e
//simplesmente 1 char (tipo ch=getch())
//não aconselho usar getchar() pois em sistema
//onde há entrada iterativa ele não é seguro(ele
//não é seguro por natureza)
//Não esquecer que getch faz parte da CONIO.h(na
//maioria dos compiladores). Na verdade o padrão ANSI
//não define nenhuma função que garanta entrada
//iterativa mas muitos compiladores possuem
//versões alternativas como getch() e getche()
//Neste caso scanf() poderia ser usado para ler //apenas 1 caractere(se este for o interesse) seria
//scanf("%c",&ch), mas como getchar() em entradas
//iterativas não é aconselhavel
//pois guarda a entrada em buffer. E não esqueça
//que a CONIO.H eh para windows
scanf("%*[^\n]");
scanf("%*c");
printf("Salario..:");
scanf("%f",&sal);
if (sexo=="m") //se usar 1 char usar aqui aspas simples
desc=sal*0.05;
else
desc=sal*0.03;
saliq=sal-desc;
printf("Desconto...... : %.2f\n",desc);
printf("Salario Liquido: %.2f\n",saliq);
system("pause"); //essas chamadas de sistema valem para windows
}


MINHA VERSÃO

#include<stdio.h>

int main()
{
char matr[10],sexo;
float sal, desc, saliq;
puts("Matricula:");
gets(matr);
do{
puts("Sexo.....:");
scanf("%c",&sexo);
}while(sexo != 'f' && sexo != 'm');
puts("Salario..:");
scanf("%f",&sal);
if (sexo=='m')
desc=sal*0.05;
else
desc=sal*0.03;
saliq=sal-desc;
printf("Desconto...... : %.2f\n",desc);
printf("Salario Liquido: %.2f\n",saliq);
}


4. Re: Como reconhcer o valor digitado?

Clodoaldo Peres
clodoaldoPeres

(usa Ubuntu)

Enviado em 13/09/2013 - 17:58h

Mais uma, evite usar system() quando possivel, pois o system() eh usado para executar comandos do sistema como se estivesse digitando um comando no prompt de comando. Por exemplo se você fizer system("notepad");seu programa não funcionará corretamente se o bloco de notas foi excluído, ou se você estiver usando um sistema operacional diferente do Windows.
O uso não é proibido mas tenha isto sempre em mente e procure soluções portaveis.



  



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts