Duvida sobre erro em um algoritmo em C com ponteiros

08/12/2018

9

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;
}
Responder