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

C 将文件内容扫描到结构的数组中,c,file-io,eof,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 *

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

这是我的代码:注意:这是一个较大程序的示例,所以我需要声明的结构和数组

该文件的内容基本上是: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;
}
但问题是,每当我运行此代码时,都会出现以下错误:

25:警告508-在需要指针的位置提供“double”类型的数据

我试着加上

do{
   for(i=0;i<5;i++){
      q=fscanf(fin,"%5.2f\t",(*test).what[z][x]);
    }
  }while(q!=EOF);
但这也不起作用,它给出了同样的错误

有人能解决这个问题吗?

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

q=fscanf(fin,"%5.2f\t",&(*test).what[z][x]);
作为旁注,通过指向某个结构的指针访问该结构的成员非常常见,因此在C中有一个特殊的->操作符来执行此操作。因此,您可以编写foo->bar来代替*foo.bar

因此,该行的可读性略高:

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

看起来您正在尝试读取[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]));