2010-05-08 108 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