Ir para conteúdo
Fórum Script Brasil
  • 0

Duvida sobre erro em um algoritmo em C com ponteiros


John Cunha

Pergunta

Tenho esse algoritmo pra fazer:

Codifique, compile e execute um programa em C que declare na função principal uma estrutura
para o cadastro de alunos de uma academia. a) Para cada aluno armazenar: nome, sobrenome (apenas um), ano de nascimento e um vetor de 6
posições indicando quais dias da semana o aluno frequenta a academia. Lembrando que a
academia funciona de segunda a sábado;
b) Ao iniciar o programa, o usuário deverá informar o número de alunos que serão armazenados;
c) O programa deverá alocar dinamicamente a quantidade necessária de memória para armazenar
os registros dos alunos;
d) O programa deverá pedir ao usuário que entre com as informações dos alunos;
e) Ao final, o programa deve exibir na tela os dados armazenados e liberar a memória alocada. Não esqueça de usar funções para estruturar o seu código.

Consegui fazê-lo rodar mas sem o uso de ponteiro e creio que estou confundindo o conceito de ponteiro e alocação dinâmica. Então gostaria que avaliassem meu código e dissessem o que estou fazendo de errado.

Código:

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

int main(){

setlocale(LC_ALL, "Portuguese_Brazil");

    struct cadastro{
        char nome[20];
        char sobrenome[30];
        char ano[10];
        int dias[6];
    };

    int n,i,j,*p;

    printf("Digite quantos alunos cadastrar: ");
    scanf("%d",&n);
    setbuf(stdin,NULL);
    printf("\n");

    p=(int *) malloc(n*sizeof(int));

    struct cadastro c[*p];

    for(i=0;i<n;i++){
        printf("%dº aluno para cadastrar:\n\n",i+1);
        printf("Nome: ");
        fgets(c[p[i]].nome,20,stdin);
        setbuf(stdin,NULL);
        printf("Sobrenome (apenas um): ");
        gets(c[p[i]].sobrenome);
        setbuf(stdin,NULL);
        printf("Ano de nascimento: ");
        gets(c[p[i]].ano);
        setbuf(stdin,NULL);
        printf("\nDias na semana que frequenta a academia (0 para não; 1 para sim):\n");
        setbuf(stdin,NULL);
        for(j=0;j<6;j++){
            printf("Dia %d: ",j+1);
            scanf("%d",&c[p[i]].dias[j]);
            setbuf(stdin,NULL);
        }
        printf("\n\n");
    }

    printf("\n\nDados cadastrados dos alunos: \n\n");

    for(i=0;i<n;i++){
        printf("%dº aluno: \n",i+1);
        printf("Nome: %s",c[p[i]].nome);
        printf("Sobrenome: %s\n",c[p[i]].sobrenome);
        printf("Ano de nascimento: %s\n",c[p[i]].ano);
        printf("O aluno foi na academia nos seguintes dias:\n");
            if(c[p[i]].dias[0]==1)
                printf("Segunda, ");
            if(c[p[i]].dias[1]==1)
                printf("Terça, ");
            if(c[p[i]].dias[2]==1)
                printf("Quarta, ");
            if(c[p[i]].dias[3]==1)
                printf("Quinta, ");
            if(c[p[i]].dias[4]==1)
                printf("Sexta, ");
            if(c[p[i]].dias[5]==1)
                printf("Sábado");
        printf("\n\n\n");
    }

free(p);

    return 0;
}

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...