Listar dados de uma vetor de struct dinamico

0 respostas
programação
C

Olá, eu estou com problema na hora de listar os dados de um arquivo usando uma struct dinamico para ler eles,pois não retorna os caracteres inseridos no arquivo em C.

O erro ta marcado no código “void listar_dados()” embaixo

#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>


void incluir_dados(void);
void listar_dados(void);

struct aluno
{
   char nome[30];
   int idade;
   char sexo[10];
};

struct aluno *a;


main()
{

  int op;

  while(true)
  {
  printf("Digite a opcaso desejada: ");
  scanf("%d",&op);

 switch(op)
  {
  case 1:
  incluir_dados();
  break;

  case 2:
  listar_dados();
  break;

  case 3:
  exit(0);
  break;

  default:
  fflush(stdin);
  printf("\nOpcao Invalida\n");
  break;

  }


  }



}


void incluir_dados()
{
a=(struct aluno *)malloc(sizeof(struct aluno));
int i;
FILE *fp;
fp=fopen("APS.txt","w+");
if(fp==NULL)
{
    printf("Falha ao abrir o arquivo");
    exit(0);
}

for(i=0;i<5;i++)
{
printf("\nDigite o nome do aluno: ");
scanf("%s",&a[i].nome);
printf("\nDigite a idade do aluno: ");
scanf("%d",&a[i].idade);
printf("\nDigite o sexo do aluno: ");
scanf("%s",&a[i].sexo);
fprintf(fp,"%s\n%d\n%s\n",a[i].nome,a[i].idade,a[i].sexo);
}


free(a);
fclose(fp);


}


void listar_dados()
{
a=(struct aluno *)malloc(sizeof(struct aluno));
FILE *fp;
int i=0;

fp=fopen("APS.txt","r+");
if(fp==NULL)
{
printf("Falha ao abrir o arquivo");
}

//ERRO
while(fscanf(fp,"%[^\n]s %[^\n]d %[^\n]s",a[i].nome,a[i].idade,a[i].sexo)!=NULL)
{
 printf("%s\n",a[i].nome);
 printf("%d\n",a[i].idade);
 printf("%s\n",a[i].sexo);
i++;
}
//ERRO

free(a);
fclose(fp);
}
Criado 2 de novembro de 2018
Respostas 0
Participantes 1