Ir ao conteúdo
  • Cadastre-se

C Problema na execução do Switch


JVGS1111

Posts recomendados

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
Link para o comentário
Compartilhar em outros sites

#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
Link para o comentário
Compartilhar em outros sites

@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
Link para o comentário
Compartilhar em outros sites

@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

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!