2012-10-19 87 views
0

對不起,如果這是一個愚蠢的問題。顯示一個2D動態數組

這裏是我的代碼:

#include<iostream> 
using namespace std; 

int main() 
{ 
    int columns, rows; 
    char **map; 

    cin>>columns; 
    cin>>rows; 

    /*creats array of pointers rows tall*/ 
    map = new char*[rows]; 

    /*creats array of chars columns tall*/ 
    for(int i=0; i<rows; i++) 
    map[i] = new char[columns]; 

    //populate map with input 
    map[0][0] = cin.get(); 
    for(int j=0; j<rows; j++) 
    for(int i=0; i<columns; i++) 
    { 
     if (cin.peek() == '\n') 
     cin.ignore(256, '\n'); 
     else 
     map[j][i] = cin.get(); 
    } 


    //DISPLAY 
    cout<<endl; 
    for(int j=0; j<rows; j++) 
    { 
    for(int i=0; i<columns; i++) 
    { 
     cout<<map[j][i]; 
    } 
    } 
    return 0; 
} 

用戶將輸入類似:

7 4 
####### 
#S# # 
# #E# 
####### 

,我想將它輸出。不過我的出現如下:

####### 
#S#  
## # 
E##### 

有什麼想法?

+0

奇怪的部分是該行'映射[0] [0] = cin.get( );'。你爲什麼只填充'map [0] [0]'一次,以後再填充幾行?我會刪除該線的初學者。 – john

+0

如果使用cin.get()填充map [0] [0],那麼爲什麼要在for循環中覆蓋它? – jt234

回答

2

第一個for循環:

//populate map with input 

    for(int j=0; j<rows; j++) 
    { 
    cin.get(); 
    for(int i=0; i<columns; i++) 
    { 
     if (cin.peek() == '\n') 
     cin.ignore(256, '\n'); 
     else 
     map[j][i] = cin.get(); 
    } 
    } 

而新行添加到輸出:

//DISPLAY 
    cout<<endl; 
    for(int j=0; j<rows; j++) 
    { 
    for(int i=0; i<columns; i++) 
    { 
     cout<<map[j][i]; 
    } 
    cout << endl; 
    } 

請務必先在再次讀取輸入流之後得到輸入流的尾部輸入。

0

我想你需要一些換行符在輸出

for(int j=0; j<rows; j++) 
    { 
    for(int i=0; i<columns; i++) 
    { 
     cout<<map[j][i]; 
    } 
    cout << '\n'; 
    } 
1

幾件事情

  • 首先,你不循環之前需要map[0][0] = cin.get();因爲你要循環

  • 二中獲得map[0][0]如果有一個新的生產線循環跳過它也不會填充該位置的矩陣。 你應該有這樣的事情,而不是:

for(int j=0; j<rows; j++) 
    for(int i=0; i<columns; i++) 
    { 
     while (cin.peek() == '\n') 
     cin.ignore(256, '\n'); 
     map[j][i] = cin.get(); 
    } 

直接跳過(忽略),而有 '\ n' 字符。

  • 三,雖然不涉及到你的問題。你應該總是免費dynamicaly分配的內存完成時(如果你已經忘記了)

    delete [] map[i]; delete [] map;

代碼的