C 将文件内容扫描到结构的数组中
我的程序中有一个包含特定数组的结构。我想用数字扫描一个随机文件,并将内容放入该数组中 这是我的代码:注意:这是一个较大程序的示例,所以我需要声明的结构和数组 该文件的内容基本上是:5 4 3 2 5 3 4 2C 将文件内容扫描到结构的数组中,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 *
#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]));