2013-04-02 89 views
0

我正在處理一個問題,在該問題中,我必須掃描一個輸入文件,然後將變量分配給i和j。輸入文件(input.txt)必須如下所示:文件掃描C中的二維數組

100 20 
500 70 
10 3 
250 25 
600 100 

我的代碼如下所示。

int i, j; 
float table[5][5]; 
FILE * ifp = fopen("input.txt","r"); 
// initiliaze array 
for (i=0; i <=1; i++) 
    for (j=0;j<=4;j++) 
     fscanf(ifp,"%f",&table[i][j]); 

我遇到的問題是,所有的值都被輸入第一成J個 順序。我需要將兩列分開,以便J首先只讀入左邊的行。
例如,table[0][3]將代表250。並且因此table[1][0]將 代表20

如果更容易。將1列全部放入i,將列2放入j。讓我知道

  a[0] a[1] 
a[0][0]--> 100 20 <--a[1][0] 
a[0][1]--> 500 70 <--a[1][1] 
a[0][2]--> 10 3 <--a[1][2] 
a[0][3]--> 250 25 <--a[1][3] 
a[0][4]--> 600 100 <--a[1][4] 

謝謝。我一直在爲此苦苦掙扎了一段時間。

回答

1

您正在尋找你的文件的列複製到陣列的行

要做到:反轉for循環

for (j=0;j<=4;j++) 
    for (i=0; i <=1; i++) 

僅此而已。你會得到你想要的順序的數字數組中

BTW

用這個代替

fscanf(ifp," %f",&table[i][j]); 

添加空間在scanf函數的字符串格式應該是的開始" %f"

增加的空間將允許捕捉文件的換行

+0

謝謝你,這幫了很多。 – user2076925

+0

不客氣 – MOHAMED

0

首先有幾件事:

  • 您是否發現您的桌子尺寸對於您想要的尺寸太大?
  • 嵌套的for循環塊不包含大括號。如果在for循環中有多個語句要執行,除非用括號括起來,否則不會執行它們。

現在到您的程序的功能。

  • 您可以使用單個fscanf語句讀取一行中的兩個值。你的格式化字符串就像"%f %f",你會有兩個參數。
  • 你是總是會有一個不超過五行的輸入文件?如果時間更長,那麼您需要隨時分配內存。

希望有助於一些。