Duvida sobre erro em um algoritmo em C com ponteiros
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:
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;
}
John Cunha
Curtidas 0