Ir ao conteúdo
  • Cadastre-se

C Comando IF encadeado dando errado


Posts recomendados

Boa tarde,

Sou novato em programação e escolhi começar a aprender com a linguagem C.

Já fiz alguns programas básicos ensinados nos cursos que peguei, mas ao tentar fazer um programa diferente com uma estrutura mais complexa tive um problema.

Código:

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

main()
{
float v_altura,v_peso,v_imc;
	v_imc = (v_altura*v_altura)/v_peso;

	printf("\n\nEste e um programa para medir seu IMC, vamos la ?\n\n");
	printf("Primeiro insira a sua altura EX: 1.80.\n\n");
	scanf("%f",&v_altura);
		printf("\n\nOtimo, agora insira seu peso EX: 78,6.\n\n");
			scanf("%f",&v_peso);
	
	printf("\n\nCalculando..\n\n");
	printf("Prontinho, seu IMC e de: %.2f\n\n\n",(v_peso/(v_altura*v_altura)));
	printf("Tabela IMC:\n\nAbaixo de 17		\tMuito abaixo do peso\nEntre 17 e 18,49	\tAbaixo do peso\nEntre 18,5 e 24,99	\tPeso normal\nEntre 25 e 29,99	\tAcima do peso\nEntre 30 e 34,99	\tObesidade I\nEntre 35 e 39,99	\tObesidade II (severa)\nAcima de 40		\tObesidade III (morbida)\n\n\n");

if (v_imc < 17)
	printf("\n\nVoce esta muito abaixo do peso, contate um profissional de nutricao.\n\n");
	else if ((v_imc > 17 ) || (v_imc < 18.49))
		printf("\n\nVoce esta abaixo do peso ideal, contate um profissional de nutricao.\n\n");
		else 
		if ((v_imc > 18.5) || (v_imc < 24.99))
			printf("\n\nVoce esta no peso normal para sua altura.\n\n");
			else 
			if ((v_imc > 25) || (v_imc < 29.99))
				printf("\n\nVoce esta acima do peso, contate um profissional de nutricao.\n\n");
					else
						printf("\n\nVoce esta muito acima do peso, contate um profissional de nutricao.\n\n");
system("pause");
}

A ideia é que o programa pegue a informação da variável v_imc e com base em seu valor classifique a pessoa. Mas de qualquer modo ele sempre aparece como o último else.

Vocês podem me dizer onde estou errando ?

Link para o comentário
Compartilhar em outros sites

Opa, tudo bom?
 

Acho que o seu principal erro foi na declaração da variável v_imc. O calculo só deve ser feito depois que o usuário entrou os valores. O fato de aparecer sempre o ultimo else se da ao fato de que as variáveis v_altura e v_peso não fora iniciadas, logo estão recebendo lixo de memória como entrada. Assim, como o v_imc está sendo calculado logo depois das variáveis estarem sendo declaradas, o resultado dele também vai ser lixo de memória

 

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

  
/* Dei uma alterada na indentação pra melhorar a legibilidade do código, espero que não se incomode */
  
int main() /* Main sempre deve ter algum valor de retorno */
{
  	/* Iniciei todos os valores com 0, para não ficarem com lixo como valor */
	float v_altura = 0.0;
	float v_peso = 0.0;
	float v_imc = 0.0;

	printf("\n\nEste e um programa para medir seu IMC, vamos la ?\n\n");
	printf("Primeiro insira a sua altura EX: 1.80.\n\n");
	scanf("%f",&v_altura);
	printf("\n\nOtimo, agora insira seu peso EX: 78,6.\n\n");
	scanf("%f",&v_peso);
	
	printf("\n\nCalculando..\n\n");
	v_imc = (v_altura*v_altura)/v_peso;	/* O calculo será feito só depois que os valores já foram entrados pelo usuário*/

	printf("Prontinho, seu IMC e de: %.2f\n\n\n",v_imc);
	printf("Tabela IMC:\n\nAbaixo de 17		\tMuito abaixo do peso\nEntre 17 e 18,49	\tAbaixo do peso\nEntre 18,5 e 24,99	\tPeso normal\nEntre 25 e 29,99	\tAcima do peso\nEntre 30 e 34,99	\tObesidade I\nEntre 35 e 39,99	\tObesidade II (severa)\nAcima de 40		\tObesidade III (morbida)\n\n\n");


  	/* Tomei a liberdade de colocar as chaves nos if/elses, melhora a legibilidade. */
	if (v_imc < 17)
	{
		printf("\n\nVoce esta muito abaixo do peso, contate um profissional de nutricao.\n\n");
	}
	else if ((v_imc > 17 ) || (v_imc < 18.49))
	{
		printf("\n\nVoce esta abaixo do peso ideal, contate um profissional de nutricao.\n\n");
	}
	else if ((v_imc > 18.5) || (v_imc < 24.99))
	{
		printf("\n\nVoce esta no peso normal para sua altura.\n\n");
	}
	else if ((v_imc > 25) || (v_imc < 29.99))
	{
		printf("\n\nVoce esta acima do peso, contate um profissional de nutricao.\n\n");
	}
	else
	{
		printf("\n\nVoce esta muito acima do peso, contate um profissional de nutricao.\n\n");
	}

	system("pause");
  	return 0;	/* Execução bem sucedida. Retornando 0 para a função main() */
}

Espero ter ajudado

Link para o comentário
Compartilhar em outros sites

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...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!