2016-01-04 49 views
-4

我試圖編寫一個簡單的TicTacToe遊戲作爲一個練習從C++編程書。這應該完成而不使用指針或向量,因爲我只完成了數組章節。我在嘗試運行代碼時遇到了分段錯誤。這裏是我的代碼..分割錯誤字符數組

#include <iostream> 
#include <string> 
#include <math.h> 

using namespace std; 

void displayArray(char array[3][3]); 



main() 
{ 
    char board[][3] = 
    { 
     {' ',' ',' '}, 
     {' ',' ',' '}, 
     {' ',' ',' '} 
    }; 



    int p1; 
    int p2; 
    int j2; 
    int j1; 
    int i2; 
    int i1; 

    for (int i = 0; i < 9; i++) 
    { 
     if(pow(-1,i) == 1) 
     { 
      while (board[i1][j1] != ' ') 
      { 
       cout << "Player 1 insert your indices\n"; 
       cin >> p1 ; 
       i1 = floor(p1%10); 
       j1 = p1%10; 
      } 
      board[i1][j1] = 'X'; 

     } 
     else 
     { 
      while (board[i1][j1] != ' ') 
      { 
       cout << "Player 2 insert your indices\n"; 
       cin >> p2 ; 
        i2 = floor(p2%10); 
        j2 = p2%10; 
      } 
      board[i1][j1] = 'O'; 
     } 
    } 
    displayArray(board); 

} 


void displayArray(char array[3][3]) 
{ 
    cout << "Board :\n" ; 
    for (int i = 0; i < 3; i++) 
    { 
     cout << array[i][0] << '\t' << array[i][2] << '\t' << array[i] [2] << '\n'; 
    } 
    cout << '\n' ; 

} 
+0

當您運行代碼時會發生什麼?什麼是潛在的例外和在哪一行? –

+1

使用調試器,並通過您的代碼並找出問題的位置 – user7

+0

它只是說當我運行代碼時的「分段錯誤」。編譯時不會出現錯誤或警告。 –

回答

0
while (board[i1][j1] != ' ') 

i1j1不被初始化開始。所以當你做board[i1][j1]你可能會觸摸未知的領域。這在C++中被稱爲Undefined behavior,如果您的代碼執行此操作,運行時可以自由執行任何操作。對於大多數情況下,它是一個分段錯誤。

而且這一部分:

while (board[i1][j1] != ' ') 
    { 
     cout << "Player 2 insert your indices\n"; 
     cin >> p2 ; 
     i2 = floor(p2%10); 
     j2 = p2%10; 
    } 

是一個無限循環。你的意思是寫i2j2而不是?

+0

問題解決了。非常感謝你的快速回復,我開始喜歡這個社區:),是的,我忘記了while循環的變化太多複製粘貼:) –

+0

@ÇağlarSamaner如果答案解決了你的問題,你通常會接受它。 #SoReadyToHelp。 :) – bashrc

+0

剛剛註冊仍然試圖學習規則:)完成。 –