我的程序中有一个包含特定数组的结构。我想用数字扫描随机文件并将内容放入该数组中。
这是我的代码:(注意:这是来自更大程序的示例,所以我需要声明的结构和数组)
该文件的内容基本上是: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);
但是那也没有用,它会给出同样的错误。
有没有人能解决这个问题?
答案 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]));