Logo Hardware.com.br
vitor hugo2014
vitor hugo20... Novo Membro Registrado
7 Mensagens 0 Curtidas

(Dúvida de iniciante) Calculadora simples em 'C' retorna valores absurdos...

#1 Por vitor hugo20... 20/01/2015 - 00:33
Boa noite a todos!
Estou tentando implementar uma calculadora simples usando a linguagem C e o compilador ZinjaI, porém, ao efetuar qualquer operação, o programa me retornar ''0'' ou ''1'' em vez do resultado correto... segue o meu código:
[code=C]
#include


int main() {




float x,y,resul;
char op;

printf ("escolha o primeiro numero: ");
scanf (" %f" ,&x);

printf ("escolha a operacao que deseja efetuar:\n+\n-\n*\n/");
scanf (" %c",&op);



if (op=='+'){
resul=x+y;

}

else if ( op=='-'){
resul=x-y;
}

else if(op=='*'){
resul=x*y;
}

else if(op=='/'){
resul=x/y;
}

else {
while ( op!= '+' && op != '-' && op!= '*' && op!='/')
{ printf("selecione uma operacao valida.\nescolha a operacao que deseja efetuar:\n+\n-\n*\n/");
scanf(" %c",&op); }
}




printf("escolha o segundo numero: ");
scanf("%f",&y);



printf("Resultado: \n%1.f",resul);

}[/code]
quemsou_naodigo
quemsou_naod... Cyber Highlander Registrado
28.8K Mensagens 1.8K Curtidas
#3 Por quemsou_naod...
20/01/2015 - 06:55
Você usa os if...else para verificar o operador e se ele não for válido o programa fica preso em um loop.
Mas depois que ele fica preso em um loop e é liberado, como você sabe qual é a operação?

Também considere usar switch...case para menus, ao invés de vários if...else.

EDIT:
Além de tudo isso, encontrei um erro básico de lógica:
Você está tentando calcular operações envolvendo a variável y sem ter um valor atribuído para ela. Note que o usuário somente entra com o valor da variável y após o programa supostamente calcular as operações.

Coloque esse bloco:
[code=C]
while( op!='+'&& op !='-'&& op!='*'&& op!='/')
{printf("selecione uma operacao valida.\nescolha a operacao que deseja efetuar:\n+\n-\n*\n/");
scanf(" %c",&op);}
}
[/code]
Antes desse:

[code=C]
if(op=='+'){
resul=x+y;

}

elseif( op=='-'){
resul=x-y;
}

elseif(op=='*'){
resul=x*y;
}

elseif(op=='/'){
resul=x/y;
}[/code]

Esse pedido de entrada para o usuário:
[code=C]
printf("escolha o segundo numero: ");
scanf("%f",&y);[/code]

Pode ficar depois disso:
[code=C]
printf("escolha o primeiro numero: ");
scanf(" %f",&x);[/code]
vitor hugo2014
vitor hugo20... Novo Membro Registrado
7 Mensagens 0 Curtidas
#4 Por vitor hugo20...
20/01/2015 - 12:13
quemsou_naodigo disse:
Você usa os if...else para verificar o operador e se ele não for válido o programa fica preso em um loop.
Mas depois que ele fica preso em um loop e é liberado, como você sabe qual é a operação?

Também considere usar switch...case para menus, ao invés de vários if...else.

EDIT:
Além de tudo isso, encontrei um erro básico de lógica:
Você está tentando calcular operações envolvendo a variável y sem ter um valor atribuído para ela. Note que o usuário somente entra com o valor da variável y após o programa supostamente calcular as operações.

Coloque esse bloco:
[code=C]
while( op!='+'&& op !='-'&& op!='*'&& op!='/')
{printf("selecione uma operacao valida.\nescolha a operacao que deseja efetuar:\n+\n-\n*\n/");
scanf(" %c",&op);}
}
[/code]
Antes desse:

[code=C]
if(op=='+'){
resul=x+y;

}

elseif( op=='-'){
resul=x-y;
}

elseif(op=='*'){
resul=x*y;
}

elseif(op=='/'){
resul=x/y;
}[/code]

Esse pedido de entrada para o usuário:
[code=C]
printf("escolha o segundo numero: ");
scanf("%f",&y);[/code]

Pode ficar depois disso:
[code=C]
printf("escolha o primeiro numero: ");
scanf(" %f",&x);[/code]


Muito obrigado pelas dicas e atenção! agora entendi melhor como funciona a lógica e vou poder ir mais além! smile.png
icefusion
icefusion Tô em todas Registrado
2.2K Mensagens 41 Curtidas
#5 Por icefusion
10/02/2015 - 14:27
Toda vez que tu vai ter entrada de dados pelo usuário, você le as entradas primeiro, depois você executa as operações. Pois muitas vezes existe lixo de memória e pode causar diferença nos valores (embora no seu caso, calculou antes de receber o segundo valor). O ideal é inicializar sempre as variáveis com um valor padrão. Por Exemplo 0 (Zero para inteiros) , "" (Vazio para Strings), (false ou true para boleanos) e assim por diante.
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal