2010-05-08 109 views
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; 
} 

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

(25):警告508 - 类型的数据“双”供给,其中一个指针是需要

我尝试添加

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

但没有工作要么,它给出了同样的错误。

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

回答

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]); 
+0

投票最好,因为它的信息更丰富,谢谢你们两位:) – NLed 2010-05-08 21:42:03

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])); 
+0

'.'和' - >'运算符的优先级高于''&'运算符的地址。所以你不需要额外的括号。 – slacker 2010-05-08 21:37:37

+0

这样一个简单的错误,我无法弄清楚。谢谢你,谢谢你,谢谢你 :) – NLed 2010-05-08 21:40:55