将文件内容扫描到结构数组中

时间:2010-05-08 21:18:35

标签: c file-io eof

我的程序中有一个包含特定数组的结构。我想用数字扫描随机文件并将内容放入该数组中。

这是我的代码:(注意:这是来自更大程序的示例,所以我需要声明的结构和数组)

该文件的内容基本上是:5 4 3 2 5 3 4 2

#include<stdio.h>

#define first 500
#define sec 500


struct trial{
  int f;
  int r;
  float what[first][sec];
};

int trialtest(trial *test);

main(){
  trial test;
  trialtest(&test);
}

int trialtest(trial *test){
  int z,x,i;
  FILE *fin;
  fin=fopen("randomfile.txt","r"); 
  for(i=0;i<5;i++){
      fscanf(fin,"%5.2f\t",(*test).what[z][x]);
    }
  fclose(fin);
  return 0;
}

但问题是,每当我运行此代码时,我都会收到此错误: alt text http://img682.imageshack.us/img682/4580/errorfile.png

(25):警告508 - 在需要指针的地方提供“double”类型的数据

我尝试添加

do{
   for(i=0;i<5;i++){
      q=fscanf(fin,"%5.2f\t",(*test).what[z][x]);
    }
  }while(q!=EOF);

但是那也没有用,它会给出同样的错误。

有没有人能解决这个问题?

2 个答案:

答案 0 :(得分:0)

此表达式:(*test).what[z][x]是数组中的float(会被提升为double,因此会显示警告消息)。 fscanf()需要为数据提供指针(在本例中为float),以便它可以写入数据。您需要将此行更改为:

q=fscanf(fin,"%5.2f\t",&(*test).what[z][x]);

作为旁注,通过指向struct的指针访问struct的成员是如此常见,以至于您在C中有一个特殊的->运算符来执行此操作。因此,您可以编写(*foo).bar而不是foo->bar

因此该行变得更具可读性:

q=fscanf(fin,"%5.2f\t",&test->what[z][x]);

答案 1 :(得分:0)

您似乎正在尝试读取 [z] [x]的值,而不是引用它:

fscanf(fin,"%5.2f\t",(*test).what[z][x]);

试试这个:

fscanf(fin,"%5.2f\t",&((*test).what[z][x]));

或者,

fscanf(fin,"%5.2f\t",&(test->what[z][x]));