Ir ao conteúdo
  • Cadastre-se
Heber Nascimento

C Manipular array de uma struct

Recommended Posts

Estou fazendo uma tarefa para faculdade, estou começando a programar e não sei muito como fazer.

A ideia do tarefa é: 

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

 

Estou com dificuldades nos casos 2 e 3. 

 

O que é que esta faltando para "apagar" o conteúdo dos array na posição escolhida?

 

Até agora o que tenho é isso:


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct cadastro
{
    char nome[30];
    char email[15];
    float peso, alt;    
};

struct cadastro ficha [20];

int main()
{
    
    int op,i,f=0,s=0;
    char exCont[30];
    
/*    for (i = 0; i < 20; i++)

{

sprintf(ficha[i].nome,"");

sprintf(ficha[i].email,"");

}*/
    
    do{
    printf("Cadastro\n");
    printf("1 - Registrar novo aluno\n");
    printf("2 - Excluir registro\n");
    printf("3 - Editar registro\n");
    printf("4 - Listar registros\n");
    printf("5 - Buscar registro\n");
    printf("0 - Sair\n");
    scanf("%d", & op);
    
    switch (op)
    {
        case 1:
            printf("Escolha a posicao de 0 a 19 para a adicionar : ");
            scanf("%d", &i);
            if(i>=20)
            {
                printf("posicao invalida! Refaca a operacao\n");
                i=0;
            }
            else
            {
                printf("posicao: %d\n",i);
                printf("Digite o nome:\n");
                scanf("%s", ficha[i].nome);
                printf("Digite o telefone:\n");
                scanf("%s", ficha[i].email);
                printf("Digite o peso:\n");
                scanf("%f", & ficha[i].peso);
                printf("Digite a altura:\n");
                scanf("%f", & ficha[i].alt);
                system("cls");
                printf("\n\nRegistro adicionado!!\n\n");
            }
            break;
        case 2:
        printf("Digite a posicao do registro que deseja excluir\n");
        scanf("%d",& i);
            if (i>=0 || i <=19)
            {
                ficha[i].nome == "";
                ficha[i].email == "";
                ficha[i].peso = 0;
                ficha[i].alt = 0;
                printf("\n\nRegistro excluirdo!!\n\n");
            }
            else
            {
                printf("posicao invalida");
            }
            break;
        case 3:
            break;
        case 4:
            for(i=0; i<20; i++)
            {
                printf("%d: %s, %s\n",i,ficha[i].nome,ficha[i].email);
            }
            break;
        case 5:
            printf("Qual nome do aluno voce deseja Procurar:\n");
            scanf("%s", exCont);
            i=1;
            while(f == 0 || i <= 15)
            {
                if (strcmp (exCont, ficha[i].nome) == 0)
                {
                    system("cls");
                    printf("\n\n");
                    printf(ficha[i].nome);
                    printf("\n");
                    printf(ficha[i].email);
                    printf("\n");
                    f = 1;
                }
                i++;
                }
            break;
        case 0:
            s = 1;
            break;
            default:
            printf("Opcao invalida\n");
//            system("cls");
            break;
            
    }
    
    }
    while (s == 0);
    return (0);
}

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante

@Heber Nascimento Olá. Na opção 2 faça o seguinte:

 

if (i > 0 || i <= 19)
{
    strcpy(ficha[i].nome, ""); // aqui você está trabalhando com string
    strcpy(ficha[i].email, "");
    ficha[i].peso = 0;
    ficha[i].alt = 0;
    printf("\n\nRegistro excluirdo!!\n\n");
}

Na opção de Editar (opção 3), solicite ao usuário qual a posição q ele deseja editar e aí exclua os valores dessa posição e solicite os novos dados. Essa seria uma das formas para fazer isso

Também sugiro, para uma melhor apresentação na opção Listar, mostrar todos os dados, como também usar um contador q você incrementa ao ser inserido um novo registro e no for da função listar usar esse contador para listar apenas os registros inseridos, e não os 20 números como vem fazendo

  • Curtir 1
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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 publicações 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

×