0

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

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

文件内容基本上是: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 - 在需要指针的地方提供了“双”类型的数据

我尝试添加

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

但这也不起作用,它给出了同样的错误。

有没有人有解决这个问题的方法?

4

2 回答 2

0

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

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

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

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

q=fscanf(fin,"%5.2f\t",&test->what[z][x]);
于 2010-05-08T21:29:06.140 回答
0

看起来您正在尝试读取what[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]));
于 2010-05-08T21:30:01.190 回答