Ir ao conteúdo
  • Cadastre-se

GustavoSoaresLima

Membro Júnior
  • Posts

    3
  • Cadastrado em

  • Última visita

Reputação

0
  1. Citação: Nossa muito obrigado, tudo funcionou perfeitamente, a unica coisa que ainda não sei como fazer é o apagar alunos, de resto ta certinho, meu código esta assim agora: #include<stdio.h> #include<stdlib.h> #include <locale.h> struct Aluno{ char nome[20]; char email[20]; char grau[20]; float peso; float altura; float IMC; }; struct Aluno cad_aluno[20]; float calculaimc(float p, float a){ float resultado = p / (a*a); return resultado; } int main (){ int opcao, i, l; setlocale(LC_ALL, "Portuguese"); for (i = 1; i <=20;){ printf("\n\nCadastro dos Alunos: \n"); printf("Digite o numero de uma das opções: \n"); printf("1- Cadastrar aluno \n"); printf("2- Listar alunos \n"); printf("3- Apagar alunos \n"); printf("4- Listar IMC de alunos \n"); printf("0- Sair \n"); scanf("%d", &opcao); switch(opcao) { case 1: fflush(stdin); printf ("\n Nome do aluno: "); scanf ("%s", &cad_aluno[i].nome); fflush(stdin); printf ("\n Email do aluno: "); scanf ("%s", &cad_aluno[i].email); fflush(stdin); printf ("\n Peso do aluno: "); scanf ("%f", &cad_aluno[i].peso); fflush(stdin); printf ("\n Altura do aluno: "); scanf ("%f", &cad_aluno[i].altura); fflush(stdin); cad_aluno[i].IMC = calculaimc(cad_aluno[i].peso, cad_aluno[i].altura); fflush(stdin); if (cad_aluno[i].IMC < 18.5){ //esse desvio define a condicao do aluno strcpy(cad_aluno[i].grau, "Baixo peso"); } else if (cad_aluno[i].IMC >=18.5 && cad_aluno[i].IMC <25){ strcpy(cad_aluno[i].grau, "Peso ideal"); } else if (cad_aluno[i].IMC >=25 && cad_aluno[i].IMC<30){ strcpy(cad_aluno[i].grau, "Sobrepeso"); } else if (cad_aluno[i].IMC >=30 && cad_aluno[i].IMC<35){ strcpy(cad_aluno[i].grau, "Obesidade Grau 1"); } else if (cad_aluno[i].IMC >=35 && cad_aluno[i].IMC<=40){ strcpy(cad_aluno[i].grau, "Obesidade Grau 2"); } else if (cad_aluno[i].IMC > 40){ strcpy(cad_aluno[i].grau, "Obesidade Grau 3"); } i++; //incrementa o laco para contar somente os alunos cadastrados break; case 2: for (l = 1; l <=20; l++) { //contador diferente para nao atrapalhar na contagem cadastros if(l < i){ printf("\n\nNome: %s", cad_aluno[l].nome); printf("\nEmail: %s", cad_aluno[l].email); printf("\nPeso: %1.2f", cad_aluno[l].peso); printf("\nAltura: %1.2f", cad_aluno[l].altura); printf("\nIMC: %1.2f", cad_aluno[l].IMC); } else{ l = 20; } } break; case 3 : break; case 4 : for (l = 1; l <=20; l++) { if(l < i){ printf("\nIMC do aluno %s:", cad_aluno[l].nome); printf(" %1.2f ", cad_aluno[l].IMC); printf(" Condição: %s", cad_aluno[l].grau); } else{ l = 20; } } break; case 0 : exit(0); //encerra o programa default: printf ("Opção invalida(Somente numeros de 0 a 4)\n"); break; } } return 0; }
  2. Arrumei isso de rodar 20 vezes, sobre deixar o programa mais organizado, como esse é um trabalho que eu tenho prazo para entrega não quero tentar fazer muito, com medo de não conseguir fazer nada e não entregar, mas obrigado pelas observações. adicionado 5 minutos depois Olá. Mudei o código, e agora ele cadastra, mostra a lista de alunos e a lista de IMC dos alunos, mas ele não esta mostrando o float direito, eu coloco valores neles, mas quando peço pra mostrar só aparece "0.00". #include<stdio.h> #include<stdlib.h> #include <locale.h> struct Aluno{ char nome[20]; char email[20]; float peso; float altura; float IMC; }; struct Aluno cad_aluno[20]; float calculaimc(float p, float a){ float resultado = p / (a*a); return resultado; } int main (){ int opcao, i, l; setlocale(LC_ALL, "Portuguese"); for (i = 1; i <=20;){ printf("\n\nCadastro dos Alunos: \n"); printf("Digite o numero de uma das opções: \n"); printf("1- Cadastrar aluno \n"); printf("2- Listar alunos \n"); printf("3- Apagar alunos \n"); printf("4- Listar IMC de alunos \n"); printf("0- Sair \n"); scanf("%d", &opcao); switch(opcao) { case 1: fflush(stdin); printf ("\n Nome do aluno:"); scanf ("%s", &cad_aluno[i].nome); fflush(stdin); printf ("\n Email do aluno:"); scanf ("%s", &cad_aluno[i].email); fflush(stdin); printf ("\n Peso do aluno: "); scanf ("%f", &cad_aluno[i].peso); fflush(stdin); printf ("\n Altura do aluno: "); scanf ("%f", &cad_aluno[i].altura); fflush(stdin); cad_aluno[i].IMC = calculaimc(cad_aluno[i].peso, cad_aluno[i].altura); fflush(stdin); i++; break; case 2: for (l = 1; l <=20; l++) { if(l < i){ printf("\n\nNome: %s", &cad_aluno[l].nome); printf("\nEmail: %s", &cad_aluno[l].email); printf("\nPeso: %1.2f", &cad_aluno[l].peso); printf("\nAltura: %1.2f", &cad_aluno[l].altura); printf("\nIMC: %1.2f", &cad_aluno[l].IMC); } else{ l = 20; } } break; case 3 : break; case 4 : for (l = 0; l <20; l++) { if(l < i){ printf("IMC do aluno %d: %1.2f", &l, &cad_aluno[l].IMC); } else{ l = 20; } } break; case 0 : exit(0); default: printf ("Opção invalida\n"); break; } } return 0; } O sair também funciona, e eu também não sei como vou fazer para apagar os alunos. Obrigado desde já.
  3. Boa noite/tarde/dia, eu preciso fazer um programa para calcular IMC e cadastrar alunos, mas não estou conseguindo, não entendo nada de C. Isso é o que pede no enunciado: * Uma função separada para calcular o imc, ela recebe dois valores em ponto flutuante (peso e altura) e retorna um valor (o imc) em ponto flutuante. * Uma estrutura chamada Aluno onde será armazenado nome, e-mail, peso e altura. * Um vetor de 20 posições que armazenará as estruturas. * Uma tela de menu, que terá as seguintes opções: 1. Cadastra aluno (apenas 1, escolhendo a posição de 1 a 20). 2. Listar alunos. 3. Apagar aluno (pode apagar pela posição na lista). 4. Listar IMC de alunos (lista todos os nomes, com o valor do IMC e a condição para o IMC de acordo com a tabela acima). 0. Sair. O programa deve permanecer em execução até o usuário escolher a opção "Sair". Isso é o que eu fiz até agora, quando eu compilo não da erro nenhum, o programa roda, mas quando eu escolho uma das opções me retorna o erro "Segmentation fault". #include<stdio.h> #include<stdlib.h> #include <locale.h> struct Aluno { char nome[30]; char email[30]; float peso; float altura; float IMC; }; struct Aluno cad_aluno[20]; float calculaimc(float p, float a){ float resultado = p / (a*a); return resultado; } int main (){ int opcao, i; setlocale(LC_ALL, "Portuguese"); do { printf("Cadastro dos Alunos: \n"); printf("Digite o numero de uma das opções: \n"); printf("1- Cadastrar aluno \n"); printf("2- Listar alunos \n"); printf("3- Apagar alunos \n"); printf("4- Listar IMC de alunos \n"); printf("0- Sair \n"); scanf("%d", opcao); switch(opcao) { case 1: for (i = 0; i <20; i++){ fflush(stdin); printf ("\n Nome do aluno:"); scanf ("%s", &cad_aluno[i].nome); fflush(stdin); printf ("\n Email do aluno:"); scanf ("%s", &cad_aluno[i].email); fflush(stdin); printf ("\n Peso do aluno: "); scanf ("%f", &cad_aluno[i].peso); fflush(stdin); printf ("\n Altura do aluno: "); scanf ("%f", cad_aluno[i].altura); fflush(stdin); cad_aluno[i].IMC = calculaimc(cad_aluno[i].peso, cad_aluno[i].altura); fflush(stdin); } break; case 2: for (i = 0; i <20; i++) { printf("d: %s | %s | %.2f | %.2f | %.2f", i, cad_aluno[i].nome, cad_aluno[i].email, cad_aluno[i].peso, cad_aluno[i].altura, cad_aluno[i].IMC ); } break; case 3 : break; case 4 : for (i = 0; i <20; i++) { printf("%.2f", cad_aluno[i].IMC ); } break; case 0 : exit(0); default: printf ("Opção invalida\n"); break; } } while (1); return 0; } adicionado 6 minutos depois Consertei o: scanf("%d", &opcao); mas quando iria executar o: cad_aluno[i].IMC = calculaimc(cad_aluno[i].peso, cad_aluno[i].altura); O erro volta.

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