2014-01-17 134 views
-2

我需要讀取一個txt文件並將其存儲到一個矩陣(我們假設它是一個2x2矩陣)。我有下面的代碼有問題(我semplified它更夾板):C++讀取txt文件並將其存儲在矩陣中char char由字符

#include<stdexcept> 
#include<string> 
#include<fstream> 
using namespace std; 

class A{ 

private: 

int **m; 

void allocate_mem(int ***ptr){ 
    *ptr = new int *[2]; 
    (*ptr)[0] = new int[2*2]; 
    for(unsigned i = 1; i < 2; i++) 
     (*ptr)[i] = (*ptr)[0] + i*2; 
} 

void read_file(string file_input){ 
    ifstream fin(file_input.c_str()); 
    allocate_mem(&m); 
    char a; 
    for(unsigned i = 0; i < 2; i++) { 
     for (unsigned j = 0; j < 2; j++) { 
      a = fin.get(); 
      if(a=="X"){  
//ISO C++ forbids comparison between pointer and integer [-fpermissive] 
       m[i][j] = 1; 
      }else{ 
       m[i][j] = 0; 
      } 
     }  
    } 
    fin.close();   
} 

public: 

A(){ 
    throw logic_error("Error!"); 
} 

A(string file_name){ 
    read_file(file_name); 
} 

~A(){ 
    delete[] m[0]; 
    delete[] m; 
} 

}; 

input.txt中

XX 
X 

我要存儲一個2×2矩陣,其elemets是:

11 
01 
+1

發生了什麼事?它是否編譯?如果是這樣,你得到的是什麼產出而不是你期望的? – bstamour

+1

if(a ==「X」)''應該是'if(a =='X')'帶單引號 –

+0

它不能編譯。該錯誤在代碼中//之後指示。 – MBall

回答

0

的解決方案是簡單:寫入C++代替C

使用標準容器而不是手動內存管理。 另外,如果您在編譯時知道數據的大小,爲什麼要使用動態內存?

int m[2][2]; 

void read_file(const std::string& file_input) { 
    ifstream fin(file_input.c_str()); 
    char a; 

    if(!fin) throw; 

    for (std::size_t i = 0; i < 2; i++) { 
     for (std::size_t j = 0; j < 2; j++) { 
      a = fin.get(); 
      if (a == 'X') { // '' is for characters, "" for strings. Thats why the compiler 
       m[i][j] = 1;// warns you (You are comparing the char[], which is decayed to 
      } else {  // char*, with the integer value of the char variable) 
       m[i][j] = 0; 
      } 
     } 
    } 
//Close not needed (RAII) 
} 
相關問題