Ir ao conteúdo

Posts recomendados

Postado

Boa tarde, estou fazendo um programa com struct e vetores, é um programa registra 10 usuários e mostra a media de altura, media de peso, o mais obeso e o menos obeso, o programa esta apresentando problemas na hora de selecionar uma opção:

 

Percebi que deixei de lado algumas boas praticas, sorry.

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


int main() {
	
	int i, escolha = 10;
	int menos = 0, mais = 0;
	setlocale(LC_ALL, "Portuguese");
	
	struct ficha_paciente{
		
		int id[10];				
		int peso[10];
		float altura[10];
		float imc[10];
				
	};
	
	struct ficha_paciente paciente;
	
	struct resultado_paciente{
		
		int maisObeso;
		int menosObeso;
		int mediaDePeso;
		float mediaDeAltura;
				
	};

	struct resultado_paciente resultado;
	
	for(i = 0; i< 10; i++){
				
		printf("Digite o peso da %d° pessoa\n", 1 + i);
		scanf("%d", &paciente.peso[i]);
		printf("Digite a altura da %d° pessoa\n", 1 + i);
		scanf("%f", &paciente.altura[i]);
		
		paciente.imc[i] = ((float)paciente.peso[i]/(paciente.altura[i]*paciente.altura[i])); //calculo de IMC
		paciente.id[i] = 1 + i;
		
		resultado.mediaDeAltura += paciente.altura[i]; //media altura
		resultado.mediaDePeso += paciente.peso[i]; //media peso
		mais = paciente.peso[i];
		menos = paciente.peso[i];
		if(paciente.peso[i] > mais){
			resultado.maisObeso = i;
		}
		if(paciente.peso[i] < menos){
			resultado.menosObeso = i;
		}
	}
	system("cls");
	
	while(escolha != 5){
		
		system("cls");
		
		printf("MENU DA OBESIDADE\n\n");
		printf("1 - informar mais obeso\n");
		printf("2 - informar menos obeso\n");
		printf("3 - informar a média de peso\n");
		printf("4 - informar a média de altura");
		printf("5 - sair\n");
		scanf("%d", &escolha);
		
		system("cls");
		
		switch(escolha){
			
			case 1:
				printf("paciente mais obeso:\n");
				printf("id: %d\n peso:%d\n altura:%.2f\nIMC:%.2f\n", paciente.id[resultado.maisObeso], paciente.peso[resultado.maisObeso], paciente.altura[resultado.maisObeso],paciente.imc[resultado.maisObeso]);
				break;
			case 2:
				printf("paciente menos obeso:\n");
				printf("id: %d\n peso:%d\n altura:%.2f\nIMC:%.2f\n", paciente.id[resultado.menosObeso], paciente.peso[resultado.menosObeso], paciente.altura[resultado.menosObeso],paciente.imc[resultado.menosObeso]);
				break;
			case 3:
				printf("Media de peso: %d\n",resultado.mediaDePeso / 10);
				break;
			case 4:
				printf("Media de altura: %.2f\n",resultado.mediaDeAltura / 10);
				break;
			case 5:
				printf("SAINDO\n");
				break;
			default: 
				printf("Valor invalido!");
				system("pause");
				break;			
		}

	}	
	return 0;
}

 

  • Amei 1
Postado
#include <limits.h>


int main() {
	
	int i, escolha = 10;
	int menos = INT_MAX, mais = 0;
  
  
	  //mais = paciente.peso[i];
	  //menos = paciente.peso[i];
		if(paciente.peso[i] > mais){
			resultado.maisObeso = i;
			mais = paciente.peso[i];
		}
		if(paciente.peso[i] < menos){
			resultado.menosObeso = i;
			menos = paciente.peso[i];
		}

 

  • Curtir 1
Postado

@JVGS1111    pode ser o compilador que você está usando , aqui no Dev c++ está funcionando bem :

#include <stdio.h>
#include <windows.h>
#include <conio.h>
#include <stdlib.h>
#include <math.h>
#include <locale.h>
#include <limits.h>


int main() {
	
	int i, escolha = 10;
	int menos = 0, mais = 0;
	setlocale(LC_ALL, "Portuguese");
	
	struct ficha_paciente{
		
		int id[10];				
		int peso[10];
		float altura[10];
		float imc[10];
				
	};
	
	struct ficha_paciente paciente;
	
	struct resultado_paciente{
		
		int maisObeso;
		int menosObeso;
		int mediaDePeso;
		float mediaDeAltura;
				
	};

	struct resultado_paciente resultado;
	
	for(i = 0; i< 1; i++){/* coloquei só hum para testar */
				
		printf("Digite o peso da %d° pessoa ", 1 + i);
		scanf("%d", &paciente.peso[i]);
		printf("Digite a altura da %d° pessoa ", 1 + i);
		scanf("%f", &paciente.altura[i]);
		
		paciente.imc[i] = ((float)paciente.peso[i]/(paciente.altura[i]*paciente.altura[i])); //calculo de IMC
		paciente.id[i] = 1 + i;
		
		resultado.mediaDeAltura += paciente.altura[i]; //media altura
		resultado.mediaDePeso += paciente.peso[i]; //media peso
		mais = paciente.peso[i];
		menos = paciente.peso[i];
		if(paciente.peso[i] > mais){
			resultado.maisObeso = i;
		}
		if(paciente.peso[i] < menos){
			resultado.menosObeso = i;
		}
	}
	system("cls");
	
	while(escolha != 5){
		
		system("cls");
		
		printf("====  MENU DA OBESIDADE  ====\n\n");
		printf(" 1 - informar mais obeso\n");
		printf(" 2 - informar menos obeso\n");
		printf(" 3 - informar a média de peso\n");
		printf(" 4 - informar a média de altura\n");
		printf(" 5 - sair\n");
		scanf("%d",&escolha);
		
		system("cls");
		
		switch(escolha){
			
			case 1:
				printf("paciente mais obeso:       Tecle !\n");
				printf("id ----: %4d\npeso --: %4d\naltura : %.2f\nIMC ---: %.2f\n", 
                paciente.id[resultado.maisObeso], paciente.peso[resultado.maisObeso], 
                paciente.altura[resultado.maisObeso],paciente.imc[resultado.maisObeso]);
                getch();
				break;
			case 2:
				printf("paciente menos obeso:    Tecle !\n");
				printf("id: %d\n peso:%d\n altura:%.2f\nIMC:%.2f\n",
                 paciente.id[resultado.menosObeso], paciente.peso[resultado.menosObeso], 
                 paciente.altura[resultado.menosObeso],paciente.imc[resultado.menosObeso]);
                 getch();
				break;
			case 3:
				printf("Media de peso: %d     Tecle !\n",
                resultado.mediaDePeso / 10);
				getch();
				break;
			case 4:
				printf("Media de altura: %.2f     Tecle !\n",
                resultado.mediaDeAltura / 10);
				getch();
				break;
			case 5:
				printf("SAINDO . . . ! ");
				for(i=10;i>=0;i--){
                    printf(" %d\b\b",i);
                    Sleep(400);
                }
				break;
			default: 
				printf("Valor invalido!");
				system("pause");
				break;			
		}

	}	
	return 0;
}

 

  • Curtir 1
Postado

@devair1010 testei aqui com suas mudanças, e tudo funciona menos a opção 1 do switch, pelo que relarei não ha necessidade de nenhuma conversão de tipos, eu realmente não sei o que tem de errado, já tentei com outros compiladores e ate criar do zero e nada.

  • Curtir 1
Postado

@JVGS1111    experimenta em outro computador , pode ser o antivirus que está bloqueando .    e agora que testei novamente , no dev c++ e no codeblocks ,  ele apresentou um erro lá no início , então precisa colocar um comando para limpar o buffer do teclado , antes do scanf , como o

 fflush(stdin);

e assim a opção 1  está  funcionando normal  .

188108370_menuobesidade.JPG.d3f385e716c552e4e603adb38f64c3c5.JPG

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!