2010-07-30 7 views
0

Comment puis-je transformer ceci en tableau? J'ai besoin d'un tableau pour montrer les espaces vides et lorsque l'utilisateur entre, il est rempli avec un X ou un O par une autre fonction. Le tableau actuel fonctionne Je voudrais le faire dans un tableau [3] [3] et afficher le contenu du tableau.Transformer le code en tableau et en affichage

void showboard(char &squareOne, char &squareTwo, char &squareThree, char &squareFour, char &squareFive, char &squareSix, char &squareSeven, 
    char &squareEight, char &squareNine) 
{ 


cout << squareOne << "|" << squareTwo << "|" << squareThree << endl 
    << "-+-+-"<< endl 
    << squareFour << "|" << squareFive << "|" << squareSix << endl 
    << "-+-+-"<< endl 
    << squareSeven << "|" << squareEight << "|" << squareNine << endl; 
} 
} 

Répondre

1

Vous pouvez avoir la fonction showboard() accepte une référence à un tableau de 3x3 de chars. Le paramètre bizarre char (&squares)[3][3] signifie "référence à un tableau 3x3 de chars nommé squares".

void showboard(char (&squares)[3][3]) 
{ 
    std::cout << squares[0][0] << "|" << squares[0][1] << "|" 
     << squares[0][2] << "\n" << "-+-+-"<< "\n" 
     << squares[1][0] << "|" << squares[1][1] << "|" 
     << squares[1][2] << "\n" << "-+-+-"<< "\n" 
     << squares[2][0] << "|" << squares[2][1] << "|" 
     << squares[2][2] << std::endl; 
} 

int main() 
{ 
    char s[3][3] = { {'1', '2', '3'}, {'4', '5', '6'}, {'7', '8', '9'} }; 
    showboard(s); 
} 

Sinon, voici une implémentation qui utilise une boucle à la place:

void showboard(char (&squares)[3][3]) 
{ 
    for(int i = 0; i < 3; ++i) 
    { 
     for(int j = 0; j < 3; ++j) 
     { 
      std::cout << squares[i][j]; 
      if(j < 2) std::cout << "|"; 
     } 
     std::cout << "\n"; 
     if(i < 2) std::cout << "-+-+-" << std::endl;; 
    } 
} 
+0

curieux de savoir pourquoi vous n'avez pas showboard() utilise une boucle pour imprimer? – Alan

+0

J'ai déroulé la boucle. Mais vous pouvez très certainement utiliser un for-loop pour cela. –

0
template <typename T, int nRows, int nCols> 
class Matrix: public vector<vector<T>> 
{ 
public: 
    Matrix() 
    { 
     for (int r = 0; r < nRows; ++r) 
     { 
      vector<T> row; 
      row.resize(nCols); 
      fill(row.begin(), row.end(), 0); 
      this->push_back(row); 
     } 
    } 

    int rows() const { return nRows; } 
    int columns() const { return nCols; } 
}; 

typedef Matrix<int, 3, 3> Board; 

void show(const Board& board) 
{ 
    for (int i = 0; i < board.rows(); ++i) 
    { 
     for (int j = 0; j < board.columns(); ++j) 
      cout << board[i][j] << " "; 
     cout << endl; 
    } 
} 
+0

+1 pour un gabarit et pour avoir clairement trop de temps sur vos mains – Falmarri

+0

Echauffement du matin au travail :) – Grozz

+0

Choses que je n'aime pas: Les contenants STL n'étaient pas faits pour être dérivés. Vous devriez construire votre interface en plus de la fonctionnalité vectorielle mais pas son interface: préférez la composition à l'héritage! Dans ce cas, vous transférez les détails de votre implémentation à des utilisateurs externes et vous ne pourrez pas modifier votre implémentation ultérieurement, et vous ne pourrez pas non plus contrôler leur utilisation de Matrix. Et s'ils le font: 'Matrix <3,3> m; m.clear(); '? Ils peuvent vérifier et voir que 'm.rows() == m.cols() == 0; 'mais' m [0] [0] 'échouera. –

Questions connexes