将文本文件转换为动态数组结构C编程

时间:2017-04-30 09:48:15

标签: c text-files dynamic-memory-allocation dynamic-arrays

我有一个包含此信息的文本文件

 AreaA  500 2   
 AreaB  200 1       
 AreaC  100 2   
 AreaD  1000    1

我希望将这些信息读入动态结构数组中 我做了这个结构

  typedef struct dadosZoo zoo, *pZoo;
  struct dadosZoo {
     char AreaID[ID_TAM];
     int capacidade;
     int adjacentes;
     //areas adjacentes
  }; 

然后我创建了一个功能' area_Estrutura'应该读取文件并将信息放入动态的结构数组中。

 void area_Estrutura(char *nomeFich, zoo *z){
    FILE *f;
    /* int cap, adj;
    char areId;*/
    //zoo *z;

    f = fopen(nomeFich, "r");
    if (f ==NULL){
       printf("Erro na abertura do ficheiro %s para leitura.\n", nomeFich);
       return;
    }

    while(fscanf(f, "%c\t%d\t%d\n", &z->AreaID, &z->capacidade, &z->adjacentes)!=EOF){
        z = malloc(sizeof(zoo));
        if(z!=NULL){
           fscanf(f, "%c\t%d\t%d\n", &z->AreaID, &z->capacidade, &z->adjacentes);
           fprintf(f, "%s\t%d\t%d\n", z->AreaID, z->capacidade, z->adjacentes);
           free(z);
        }

     }
 fclose(f);

} 

我从来不知道有多少结构,但是一条线是一个结构,所以我做了这个

 while(fscanf(f, "%c\t%d\t%d\n", &z->AreaID, &z->capacidade, &z->adjacentes)!=EOF)

读取文件而不是此行中文件的结尾我不知道我是应该这样读的还是我在那里创建的变量

 char areId;
 int cap, adj;

然后在主要我把这个调用函数

   zoo *zoo;
   area_Estrutura("Zoo.txt", zoo);

我想让它在屏幕上打印。当我构建代码时,我没有任何错误或警告,但它没有运行。有人有任何想法。 对不起,如果格式或英文有点令人困惑,但它不是我的母亲,谢谢。

1 个答案:

答案 0 :(得分:-1)

你需要改变 fscanf(f,“%c \ t%d \ t%d \ n”,& z-> AreaID,& z-> capacidade,& z-> adjacentes) 至 fscanf(f,“%s \ t%d \ t%d \ n”,z-> AreaID,& z-> capacidade,& z-> adjacentes)

即%c到%s并且不传递areadID的地址