2012-09-07 60 views
0

我有一個程序將讀取txt文件中的行數和列數。此外,程序必須從同一文件中讀取二維數組的內容。從C++中的txt文件中讀取字符

這裏是txt文件

8 20 
*  
    * 
*** 


     *** 

8和20分別的行和列的數量。在空間和星號是數組的內容,Array[8][20]例如,Array[0][1] = '*'

我沒有使程序讀取8和20如下:

ifstream myFile; 
myFile.open("life.txt"); 

if(!myFile) { 
    cout << endl << "Failed to open file"; 
    return 1; 
} 

myFile >> rows >> cols; 
myFile.close(); 

grid = new char*[rows]; 
for (int i = 0; i < rows; i++) { 
    grid[i] = new char[cols]; 
} 

現在,如何分配空間和星號來到數組中的字段?

我做了以下內容,但它沒有工作

for (int i = 0; i < rows; i++) { 
     for (int j = 0; j < cols; j++) { 
      while (myFile >> ch) 
      { 
      grid[i][j] = ch; 
      } 
     } 
    } 

我希望你得到了點。

+1

你爲什麼要關閉該文件讀取的行和列後? –

+0

如果用點代替文件中的空格,會更容易。 – jrok

+0

這是作業嗎? –

回答

0
#include <iostream> 
#include <fstream> 
#include <vector> 

using namespace std; 

int main() 
{ 
    ifstream myFile("file.txt"); 

    if(!myFile) { 
     cout << endl << "Failed to open file"; 
     return 1; 
    } 

    int rows = 0, cols = 0; 
    myFile >> rows >> cols; 

    vector<vector<char> > grid(rows, vector<char>(cols)); 
    for(int i = 0;i < rows;i++) 
    { 
     for(int j = 0;j < cols;j++) 
     { 
      if(myFile.fail()) {cout << "Improper data in file" << endl;} 
      myFile >> grid[i][j]; 
     } 
    } 
    myFile.close(); 

    //Printing the grid back 
    std::cout << "This is the grid from file: " << endl; 
    for(int i = 0;i < rows;i++) 
    { 
     cout << "\t"; 
     for(int j = 0;j < cols;j++) 
     { 
      cout << grid[i][j]; 
     } 
     cout << endl; 
    } 
} 
+0

你的代碼有問題,但我不知道它在哪裏......它沒有工作....雖然謝謝! –

+0

這不可能。只有當我測試它時,我才把它放在這裏。 你能告訴我是什麼問題? –

+0

在閱讀文件之前,我是否必須初始化'grid [i] [j]'? –

3

你可以做這樣的事情:

for (int y = 0; y < rows; y++) { 
    for (int x = 0; x <= cols; x++) { 
     char ch = myFile.get(); 
     if (myFile.fail()) <handle error>; 
     if (ch != '\n') grid[y][x] = ch; 
    } 
} 
+0

這樣的事情是正確的。因爲這肯定會炸燬換行符。 –