Ошибка: нет совпадения с оператором && - PullRequest
0 голосов
/ 16 июля 2011

Я получаю следующую ошибку

ошибка: нет совпадения для 'operator &&' в 'board [0] [0] && board [0] [1]'

Мой код следующий:

    #include <iostream>
    #include <cstdlib>
    #include <ctime>

    using namespace std;

    int main()
    {
        string board[3][3];
         board[0][0] = "[ ]";
         board[0][1] = "[ ]";
         board[0][2] = "[ ]";
         board[1][0] = "[ ]";
         board[1][1] = "[ ]";
         board[1][2] = "[ ]";
         board[2][0] = "[ ]";
         board[2][1] = "[ ]";
         board[2][2] = "[ ]";
         string choice;
         int counter;
         do
         {
            for(counter=0;counter<5;counter++)
            {
                cout<<board[0][0]<<board[0][1]<<board[0][2]<<endl;
                cout<<board[1][0]<<board[1][1]<<board[1][2]<<endl;
                cout<<board[2][0]<<board[2][1]<<board[2][2]<<endl;
            cout<<"(Player 1) Tell me the coordinates of where you want your X togo: ";
                cin>>choice;
                cout<<endl;
                if(choice=="1,1")
                {
                    board[0][0] = "[X]";
                }
                else if(choice=="1,2")
                {
                    board[1][0] = "[X]";
                }
        else if(choice=="1,3")
        {
            board[2][0] = "[X]";
        }
        else if(choice=="2,1")
        {
            board[0][1] = "[X]";
        }
        else if(choice=="2,2")
        {
            board[1][1] = "[X]";
        }
        else if(choice=="2,3")
        {
            board[2][1] = "[X]";
        }
        else if(choice=="3,1")
        {
            board[0][2] = "[X]";
        }
        else if(choice=="3,2")
        {
            board[1][2] = "[X]";
        }
        else if(choice=="3,3")
        {
            board[2][2] = "[X]";
        }

        if(board[0][0] && board[0][1] && board[0][2] == "[X]" || board[1][0] && board[1][1] && board[1][2] == "[X]" || board[2][0] && board[2][1] && board[2][2] == "[X]" || board[0][0] && board[1][0] && board[2][0] == "[X]" || board[0][1] && board[1][1] && board[2][1] == "[X]" || board[0][2] && board[1][2] && board[2][2] == "[X]" || board[0][0] && board[1][1] && board[2][2] == "[X]" ||board[2][0] && board[1][1] && board[0][2] == "[X]" ||)
        {
            cout<<"Player 1 wins!"<<endl;
        }

    }
 }
 while(counter<5);
 return 0;

}

Следующая строка ошибки:

if(board[0][0] && board[0][1] && board[0][2] == "[X]" || board[1][0] && board[1][1] &&     board[1][2] == "[X]" || board[2][0] && board[2][1] && board[2][2] == "[X]" || board[0][0]    && board[1][0] && board[2][0] == "[X]" || board[0][1] && board[1][1] && board[2][1] == "[X]" || board[0][2] && board[1][2] && board[2][2] == "[X]" || board[0][0] && board[1][1] && board[2][2] == "[X]" ||board[2][0] && board[1][1] && board[0][2] == "[X]" ||)

Ответы [ 2 ]

10 голосов
/ 16 июля 2011

Вам нужно изменить что-то вроде:

board[0][0] && board[0][1] && board[0][2] == "[X]"

Кому:

board[0][0] == "[X]" && board[0][1] == "[X]" && board[0][2] == "[X]"

Так что входы на каждой стороне && - логические значения

1 голос
/ 16 июля 2011

Я бы порекомендовал использовать массив символов вместо массива строк - тогда, когда вы спрашиваете пользователя о вводе, и он вводит «1, 3» - вы можете просто объявить два целых и использовать их:

int x, y;
scanf("%i,%i", &x, &y);
board[x][y] = 'X'; 
// and when printing the board, use: cout << "["<<board[x][y]<<"]"; 
// - or better yet, use printf :) 

// alternatively with cin:
int x, y;
cin >> x;
cin.ignore(1,',');
cin >> y;
board[x][y] = 'X';

Это сократит весь код "определите, какой квадрат выбран пользователем" :)

...