2015-11-13 15 views
-2

也許這個問題看起來很愚蠢......我想fprintf格式化爲行和列的數據集。我知道目前爲止的程序如何在行中先列出printf?

for(i=0;i<number_of_rows;i++) 
{ 
for(j=0;j<number_of_columns;j++) 
    fprintf(file,"%g\t",array[i][j]); 
fprintf(file,"\n"); 
} 

這段代碼實際上是先填充行然後填充列。我有由列創建的數據集。因此,我想填充每一列,然後再轉到下一個列。在運行時間之前,我不知道輸出數據的長度,以便製作合適的2D數組。我需要首先打印出一列,然後是另一列。我怎樣才能做到這一點?

+0

這可能嗎? –

+0

只是使列的外部循環和行的內部循環。 –

+0

您必須從每個數據集中獲取第一項,並將其作爲一行打印出來。然後從每個數據集中獲取第二項,或者你必須用固定長度的行填充一個文件,然後像瘋狂文件一樣在文件中填入fseek。數據集有多大?他們是否適合記憶? – user3386109

回答

1

我需要首先打印出一列,然後是另一列。我怎樣才能做到這一點?

這將涉及到追加到以前打印的行。而且,正如您所知道的,將內容添加到文件中涉及重寫整個文件的其餘部分。你大概可以猜到,這將是非常低效,實施起來也很複雜。

我不運行之前知道輸出數據的長度,以作出正確的二維數組

如果你的問題是數據的長度,那麼我想,通過適當的二維數組你的意思是你打算填充一列的每個單元格是相同的寬度。

在這種情況下,我建議不要浪費時間在寫專欄的想法上。相反,在運行時計算寬度。首先將sprintf轉換爲一個字符串矩陣並計算每個單元格的長度。然後使用計算的長度打印字符串矩陣。

+0

您的評論是有用的,但我甚至不能預測數組的長度。它是關於根發現功能。我基本上需要將寫指針移動到下一個選項卡 – dimpep

+1

@DimitrisPeponis當然,您知道* runtime *時數組的維數。你問題中的代碼甚至在循環中使用它們。 – user2079303