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);return0;}
Pergunta
John Cunha
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:
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.