Ir ao conteúdo

Posts recomendados

Postado
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>

void soma	(float a, float b);
void sub	(float a, float b);
void mul	(float a, float b);
void div	(float a, float b);

// Função principal
main ()
{
float a, b;
char operacao;

printf("Digite o primeiro valor: ");
scanf ("%f", &a);

printf ("Qual operacao deseja realizar? \n '+' soma.\n '-' subtracao.\n '*' multiplicacao.\n '/' divisao.\n\n operacao:");
scanf ("%c", &operacao);

printf("Digite o segundo valor: ");
scanf ("%f", &b);



system("cls");

	switch (operacao) 
	{
		ini:
		
		case '+' : 
			soma(a,b);
			break;
		case '-' :
			sub(a,b);
			break;
		case '*' :
			mul(a,b);
			break;
		case '/' :
			div(a,b);
			break;
	
		default : printf("Opcao invalida!");
		goto ini;
	}
}


//Função Soma
void soma(float a, float b)
{
float result=0;
result=a+b;
printf("%.2f + %.2f = %.2f", a, b, result);	
}

//Função Subtração
void sub(float a, float b)
{
float result=0;
result=a-b;	
printf("%.2f - %.2f = %.2f", a, b, result);
}

//Função Multiplicação
void mul(float a, float b)
{
float result=0;
result=a*b;	
printf("%.2f * %.2f = %.2f", a, b, result);
}

//Função Divisão
void div(float a, float b)
{
float result=0;
result=a/b;	
printf("%.2f / %.2f = %.2f", a, b, result);
}

Olá boa tarde, alguém poderia me ajudar por favor? este é meu código. 
Estou tentando usar a função void para determinar cada operação de uma calculadora. (+ , -, *, /).

O programa não da erro para compilar, porém enquanto esta rodando após solicitar a operação que desejo ele roda diretamente a função somar e ainda não solicita o segundo valor da operação, sempre somando com zero. 

agradeço caso alguém possa me esclarecer. 
att.

adicionado 9 minutos depois

Resolvido. 

Apenas alterando a chamada da função de 'c' char, para 's' string; funcionará tudo ok.

  • Curtir 1
Postado

@Ivander@Ivander      ele esta passando direto sem pegar o segundo valor por que mudou de tipo no scanf , entao coloque o comando   fflush (stdin) uma linha antes de todos os scanf que o tipo de dado seja diferente do ultimo usado  , e esse comando  goto  eh du bom mesmo mas ele esta em desuso ,  entao use um do /while para substitui-lo e ele deveria voltar la antes do primeiro valor , assim o usuario pode digitar outro numero e escolher qual opcao quer . colocando o   do  logo depois de   char operacao , e o while no lugar do goto  .

  • Curtir 1
Postado

É preciso tomar cuidado quando se vai ler um char com o scanf.  No seu programa o primeiro input é lido corretamente, porém o segundo vai ler o enter(nova linha) que fica armazenado no buffer stdin, lembre-se que o ENTER também é um caractere. Agora você pode se perguntar porque quando faço a leitura de vários valores numéricos isso não acontece, simplesmente porque são números.

 

Para contornar esse problema você pode deixar um espaço antes do %c, isso faz com o que scanf ignore automaticamente espaços em brancos e caracteres especiais como o enter ou fazer como o @devair1010 sugeriu.

 

printf ("Qual operacao deseja realizar? \n '+' soma.\n '-' subtracao.\n '*' multiplicacao.\n '/' divisao.\n\n operacao:");
scanf (" %c", &operacao); // <-note o espaço

 

  • Curtir 2

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!