2014-02-07 101 views
0

我想弄清楚如何從一個文件中讀取兩個矩陣,然後將它們分配給兩個不同的二維數組。矩陣在文本文件中以新行分隔。我設法讓第一個閱讀成功,但現在我不知道如何閱讀第二個。我看到它的方式,必須考慮並檢查分離這兩個矩陣的線。如何讓程序讀取第二個矩陣並將其分配給數組?兩個二維數組,兩個矩陣,一個文件

矩陣和數組都是4x4。

這是文本文件的樣子:

3 4 5 7 

5 16 7 12 

11 12 3 9 

9 8 1 12 


15 4 3 6 

1 12 3 12 

7 8 19 9 

11 12 8 5 

這裏是我的正常工作的第一陣列碼。

for (int y = 0; y < 4; ++y) 
{ 
    for (int x = 0; x < 4; ++x) 
    { 
     infile >> array1[x][y]; 
    } 
} 

這裏是我的代碼我想不通的數組。

for (int y = 0; y < 4; ++y) 
     { 
      for (int x = 0; x < 4; ++x) 
      { 
       if(x == '\n' && y == '\n') //My attempt. 
       { 
        infile >> array2[x][y]; 
       } 
      } 
     } 

這裏是輸出:

This will check to make sure numbers in file are written to the first array. 
3 4 5 7 
5 16 7 12 
11 12 3 9 
9 8 1 12 

This will check to make sure numbers in file are written to the second array. 
9.21742e-314 1.0572e-307 7.29112e-304 3.87184e-306 
1.06498e-307 1.65425e-317 6.79039e-313 4.22748e+266 
5.92879e-323 1.06196e-307 6.95089e-308 9.88799e-315 
1.79648e-313 8.48798e-314 6.95224e-308 1.06193e-307 
Press any key to continue . . . 

任何幫助表示讚賞!

+0

要讀取矩陣,請在StackOverflow中搜索「C++讀取文件解析矩陣」 –

+0

對於Matrix類,請在Web上搜索「C++常見問題解答矩陣」。 –

回答

1

當您使用「格式化輸入」運算符>>來讀取文件時,項目之間的類型和數量空格(空格,製表符,換行符)是無關緊要的。這意味着你根本不會看到空行。如果您需要根據文件的行解析文件,請考慮使用getline,並使用istringstream解析單行文件。

另一方面,如果您知道兩個數組的大小,則可以像讀取第一個數組那樣簡單地讀取第二個數組。多餘的空行會被忽略。

您讀取第二個數組的代碼不起作用的原因是,您將索引變量與'\n'進行比較,在大多數系統上恰好爲10。由於您的索引範圍從0到3,因此if條件永遠不會成立,所以沒有任何內容會被讀取,因此您會看到未初始化內存的轉儲。

+0

謝謝,這很有道理。我無法相信修復是如此簡單。感謝您解決問題並回答我的問題:P – Titan

0

您可以完全按照第一個讀取第二個數組。原因是,當你開始從流中讀取數據時,首先它會丟棄空格,直到它遇到不是空白的東西。然後它會逐個獲取數字/字符,直到再次遇到空白爲止。所以,換行符沒有問題,您可以毫無問題地讀取剩餘的數組。

相關問題