2013-02-28 104 views
0

我一直在爲一個naughts和cross程序做一些編程,而這個板子是一個二維數組。我一直在試圖讓程序重複,如果用戶想重播,但我注意到,重複時,所有的值都保留在數組中。所以我想知道是否有方法來清除我的數組中的所有值。清除二維數組中的值

我在論壇上嘗試了一些以前的問題,但是我發現的一些解決方案似乎並不奏效。

如果有人希望看到代碼只是評論,我會在這裏添加它,我只是不知道是否有必要。

任何幫助將不勝感激。

const int Rows = 4; 
    const int Columns = 4; 
    char Board[Rows][Columns] = { {' ', ' ', ' ', ' ' }, 
            {' ', '_', '_', '_' }, 
            {' ', '_', '_', '_' }, 
            {' ', '_', '_', '_' } }; 


    for (int i = 0; i < Rows; ++i) 
    { 
     for (int j = 0; j < Columns; ++j) 
      cout << Board [i][j]; 
     cout << endl; 
    } 

    cout << endl << endl; 



    int row; 
    int column; 


    do 
    { 
     cout << "Please enter the value of the row you would like to take "; 
     cin >> row; 
     }while (row != 0 && row != 1 && row != 2 && row != 3); 


    do 
    { 
     cout << "Please enter the value of the column you would like to take "; 
     cin >> column; 
     }while (column != 0 && column != 1 && column != 2 && column != 3); 


    Board [row][column] = Player1.GetNorX(); 

      for (int i = 0; i < Rows; ++i) 
    { 
     for (int j = 0; j < Columns; ++j) 
      cout << Board [i][j]; 
     cout << endl; 
    } 
+1

顯示數組的定義以及如何填充它。 – 2013-02-28 15:04:33

+0

4x4 naughts和十字架? 「'」和「_」代表什麼? – 2013-02-28 15:08:05

+0

'_'只是在那裏顯示董事會是他們和''在那裏,所以用戶不必輸入一行或一列0.對不起,我應該說, – user2078558 2013-02-28 15:11:31

回答

2

假設你想Board被複位到原來的狀態,你需要:

for (int i = 0; i < Rows; i++) { 
    for (int j = 0; j < Columns; j++) { 
    if (i == 0 || j == 0) { 
     Board[i][j] = ' '; 
    } else { 
     Board[i][j] = '_'; 
    } 
    } 
} 

通過數組的每一個元素,這將循環,如果列或行數爲0,補它與' ',或以其他方式填寫'_'

如果你只關心右下方3×3格,那麼你可以這樣做:

for (int i = 1; i < 4; i++) { 
    for (int j = 1; j < 4; j++) { 
    Board[i][j] = '_'; 
    } 
} 

但後來我建議宣佈RowsColumns3代替。如果您希望用戶輸入從1開始的行號和列號,則只需在訪問陣列時從{1,2,3}轉換爲{0,1,2}。

+0

謝謝這個工作我會接受答案,當我被允許:) – user2078558 2013-02-28 15:14:39

+0

+ 1,for循環邊界應該依賴於常量行和列,而不是硬編碼,但這只是挑剔:) – ryrich 2013-02-28 15:17:25

0

把代碼放到單獨的函數

void game() 
{ 
    const int Rows = 4; 
    // ... 
} 

,並從遊戲控制器

bool replay; 
do 
{ 
    game(); 
    cout << "Replay? (0 - no, 1 - yes)"; 
    cin >> replay; 
} while(replay); 

此方法還原了整個給環境調用它。

0

使用列表類而不是傳統的多維數組。這個類的對象的元素可以很容易地清除和刪除。此外,名單的大小是動態和可變的。創建對象時不需要指定大小。嘗試定義一個二維列表。

List<List<char>> Board = new List<List<char>>; 
+0

什麼庫/框架是這個大寫'列表'找到?這是.NET的東西,對不對?你怎麼知道OP引用.NET? (如果沒有,你可能想要使用一個標準庫結構 - 就像'std :: list',我相信。) – 2013-02-28 15:54:27

+0

是的,這個List類屬於.Net。起初在我的回答中,我還提到了列表的非託管C++庫的鏈接,但我刪除了它。請檢查以下C++標準庫:http://www.cplusplus.com/reference/list/list/ – 2013-03-01 06:14:00