Ir ao conteúdo

Posts recomendados

Postado

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 ?

Postado

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

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!