viny3314 Posted May 21, 2020 Posted May 21, 2020 Criei um programa que o usuário informa seu nome, sexo e peso. E o resultado é retornar o nome da mulher com o menor peso e o nome do homem com maior peso, porém preciso de ajuda para que na saída fale o nome tanto dessa mulher quanto o homem, mas não tô conseguindo fazer isso. Só conseguir comparar os pesos. #include <stdio.h> #include <string.h> int main(){ int pessoas, i; float peso; float resultado = 0; float resultado2 = 0; char sexo; char nome[20]; printf("Digite o numero de pessoas: "); // quantas vezes o programa vai rodar para coletar os dados scanf("%i",&pessoas); for(i=0;i<pessoas;i++){ printf("Digite o nome da pessoa: "); scanf("%s", nome); printf("Digite seu peso: "); scanf("%f",&peso); printf("Digite [M] para Sexo Masculino ou [F] para Sexo Feminino: "); scanf("%s",&sexo); if(sexo == 'm' || sexo == 'M'){ while(peso > resultado){ resultado = peso; } } else if(sexo == 'f' || sexo == 'F'){ while(resultado2 == 0){ resultado2 = peso; } if (peso < resultado2){ resultado2 = peso; } } } printf("A Mulher de menor peso: %.2f kg", resultado2); printf("\nO Homem de maior peso: %.2f kg", resultado); printf(" %s ", nome); return 0; }
diego.rax Posted May 22, 2020 Posted May 22, 2020 Os nomes das pessoas com maior e menor peso não estão sendo exibidos porque vc não armazenou em nenhum lugar como fez com os pesos. char mulher_menor_peso[21]; char homem_maior_peso[21]; // pra salvar o nome da mulher com menor peso vc pode fazer o seguinte quando encontrar esse menor peso strncpy(mulher_menor_peso, nome, 20); mulher_menor_peso[20] = '\0'; //de forma semelhante, pode fazer o seguinte quando encontrar o homem com maior peso strncpy(homem_maior_peso, nome, 20); homem_maior_peso[20] = '\0'; você pode encontrar os pesos da seguinte forma: #include <float.h> float peso_homem = 0; float peso_mulher = FLT_MAX float temp_peso; //vai armazenar temporiamente o peso inserido pelo usuário, independente do sexo //especificamente para ver o peso, vc poderia fazer desta forma. char sexo; sexo = getchar(); switch(sexo) { case 'm': case 'M': if ( temp_peso < peso_muher) peso_mulher = temp_peso; //mais a rotina pra copiar o nome sugerida anteriormente break; case 'h': case 'H': if (temp_peso > peso_homem) peso_homem = temp_peso; //mais a rotina pra copiar o nome break; default: fprintf(stderr, "não sei de que sexo vc é\n\n"); break; //redundante de certa forma } Adicionalmente, tem esse artigo que fala um pouco sobre entrada de dados em C http://sekrit.de/webdocs/c/beginners-guide-away-from-scanf.html
viny3314 Posted May 22, 2020 Author Posted May 22, 2020 6 horas atrás, diego.rax disse: Os nomes das pessoas com maior e menor peso não estão sendo exibidos porque vc não armazenou em nenhum lugar como fez com os pesos. char mulher_menor_peso[21]; char homem_maior_peso[21]; // pra salvar o nome da mulher com menor peso vc pode fazer o seguinte quando encontrar esse menor peso strncpy(mulher_menor_peso, nome, 20); mulher_menor_peso[20] = '\0'; //de forma semelhante, pode fazer o seguinte quando encontrar o homem com maior peso strncpy(homem_maior_peso, nome, 20); homem_maior_peso[20] = '\0'; você pode encontrar os pesos da seguinte forma: #include <float.h> float peso_homem = 0; float peso_mulher = FLT_MAX float temp_peso; //vai armazenar temporiamente o peso inserido pelo usuário, independente do sexo //especificamente para ver o peso, vc poderia fazer desta forma. char sexo; sexo = getchar(); switch(sexo) { case 'm': case 'M': if ( temp_peso < peso_muher) peso_mulher = temp_peso; //mais a rotina pra copiar o nome sugerida anteriormente break; case 'h': case 'H': if (temp_peso > peso_homem) peso_homem = temp_peso; //mais a rotina pra copiar o nome break; default: fprintf(stderr, "não sei de que sexo vc é\n\n"); break; //redundante de certa forma } Adicionalmente, tem esse artigo que fala um pouco sobre entrada de dados em C http://sekrit.de/webdocs/c/beginners-guide-away-from-scanf.html Adicionei no meu código e ficou assim: #include <stdio.h> #include <string.h> int main(){ int pessoas, i; float peso,altura; float resultado = 0; float resultado2 = 0; char sexo; char nome[20]; char ela[21]; char ele[21]; char novoele[23]; char novoela[23]; printf("Digite o numero de pessoas: "); scanf("%i",&pessoas); for(i=0;i<pessoas;i++){ printf("Digite o nome da pessoa: "); scanf("%s", nome); printf("Digite seu peso: "); scanf("%f",&peso); printf("Digite 'M' para Sexo Masculino ou 'F' para Sexo Feminino: "); scanf("%s",&sexo); if(sexo == 'm' || sexo == 'M'){ while(peso > resultado){ resultado = peso; strncpy(ele, nome, 20); ele[20] = '\0'; } if(peso==resultado){ strncpy(novoele, nome, 20); novoele[20] = '\0'; }} else if(sexo == 'f' || sexo == 'F'){ while (peso > resultado2){ resultado2 = peso; strncpy(ela, nome, 20); ela[20] = '\0'; } if(peso == resultado2){ strncpy(novoela, nome, 20); novoela[20] = '\0'; }}} printf("A(s) Mulher(es) de menor peso: %.2f kg", resultado2); printf(" %s ", ela); printf(" %s ", novoela); printf("\nO(s) Homem(ns) de maior peso: %.2f kg", resultado); printf(" %s ", ele); printf(" %s ", novoele); return 0; }
viny3314 Posted May 22, 2020 Author Posted May 22, 2020 Tá quase pronto, mas o nome das pessoas sai repetido, tem como não acontecer isso?? desde já agradeço, você tem me ajudado muito!!
diego.rax Posted May 24, 2020 Posted May 24, 2020 sai repetido pq vc está printando 2 vezes ué '-' não tem necessidade desses IFs todos, veja o que sugeri pra parte de comparação e separação dos nomes com maior e menor peso
viny3314 Posted May 24, 2020 Author Posted May 24, 2020 6 horas atrás, diego.rax disse: sai repetido pq vc está printando 2 vezes ué '-' não tem necessidade desses IFs todos, veja o que sugeri pra parte de comparação e separação dos nomes com maior e menor peso O código que você mandou tá dando erro
diego.rax Posted May 25, 2020 Posted May 25, 2020 21 horas atrás, viny3314 disse: O código que você mandou tá dando erro o que sugeri foram pedaços isolados de código apenas para exemplificar o que estava dizendo. Não é pra vc copiar e colar... Mas o problem da duplicidade é simplesmente o fato de vc estar chamando o printf duas vezes...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.