2013-10-27 36 views
0

我正試圖加載一個製表符和或空格分隔的文本文件到一個二維數組。該文件看起來是這樣的:將文本文件加載爲多維數組?

1 -3 4 
4 -3 7 
8 -1 10 

我已經獲得了一段代碼,表明它是允許做一些事情,如下列:

int nums[][] = { 
    #include "matrix.txt" 
}; 

但是,每當我嘗試編譯此代碼我得到錯誤:

$ gcc hangserver.c 
hangserver.c:10:5: error: array type has incomplete element type 
In file included from hangserver.c:11:0: 
matrix.txt:1:5: error: expected ‘}’ before numeric constant 
$ 

我知道有優雅的少的方式來加載此文件到一個數組,但出於純好奇,我想知道是否有可能implemen上面顯示的方法。非常感謝您花時間回答我的問題。

+1

'int nums [] []'無效。你可以擁有的最大靈活性是'int nums [] []'。 – alk

+0

如果您確定不需要在運行時讀取文件,並且文件的內容格式正確,您應該可以這樣做(不要嘗試以_clever_方式解決任務)... –

+0

'# include指令只是在編譯時將引用的文件放入該源文件中。你可以將'matrix.txt'的內容剪切+粘貼到'hangserver.c'中,並從那裏找出語法錯誤。 – Bert

回答

3

必須有一個逗號後的每個數字和每一行必須是一個{}內:

{ 1, -3, 4 }, 
{ 4, -3, 7 }, 
{ 8, -1, 10 } 
+0

謝謝大家的回覆。我也需要按照alk所描述的方式來綁定數組。 – dps

1

行擴展爲:

int nums[][] = { 
    1 -3 4 
    4 -3 7 
    8 -1 10 
    }; 

這是不能接受C和C++的語法。嘗試將matrix.txt文件更改爲

{1, -3, 4}, 
{4, -3, 7}, 
{8, -1, 10} 
2

您的方法存在概念性問題。

例如,如果你有

1, 2, 3, 4, 5, 6, 

應該如何編譯器知道你要一個3×2×3或或1X6或6X1陣列?

所以它需要提前知道列數。

對於上面的例子,這

int matrix [][3] = { 
# include "data.txt" 
}; 

會做,以及一個這樣的:

int matrix [][2] = { 
# include "data.txt" 
}; 

和此:

int matrix [][1] = { 
# include "data.txt" 
}; 

和此:

int matrix [][6] = { 
# include "data.txt" 
}; 

雖然你得到一個編譯器上面data.txt警告有關缺少括號,如(對於1 ST情況)真的應該是這樣的:

{1, 2, 3,},{4, 5, 6,}, 

(尾隨, s爲可選。)


要通過從外部文件完全避開這個做:

int matrix[][ 
# include "colums.txt" 
] = { 
# include "data.txt" 
}; 

這裏columns.txt的內容也只是描述列的預期數量從data.txt數據應被分解爲整數至。

+0

哎唷,那不適合給這樣的推薦!認真! (雖然它的技術上正確當然)... –

+0

@ g-makulik:OP要求,讓我們來討論它。 – alk

+0

讓我們儘快討論OP的醒來澄清更多關於他的真實意圖;)。如果解決方案的輸入在某個更大的系統中以某種方式以某種方式生成,或者僅用於測試目的,則可能會有問題。 –