Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
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

@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

Editado por giu_d
corrigir comentário
  • 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






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

×