ожидаемый неопознанный идентификатор перед 'if'

#include <iostream>
using namespace std;
char board[3][3]={{'1','2','3'},{'4','5','6'},{'7','8','9'}};
char turn='X';
int draw=0;
int row,column;
void display_board()
{
    system("cls");
    cout<<"\n\n TIC TAC TOE GAME:";
    cout<<"\n\n PLAYER[1]==O\t\t\t PLAYER[2]==X";
    cout<<"\t\t     |     |     \n";
    cout<<"\t\t     |     |     \n";
    cout<<"\t\t   "<<board[0][0]<<" |  "<<board[0][1]<<"  |  "<<board[0][2]<<"   \n";
    cout<<"\t\t     |     |     \n";
    cout<<"\t\t_____|_____|_____\n";
    cout<<"\t\t     |     |     \n";
    cout<<"\t\t     |     |     \n";
    cout<<"\t\t  "<<board[1][0]<<"  |  "<<board[1][1]<<"  |  "<<board[1][2]<<"    \n";
    cout<<"\t\t     |     |     \n";
    cout<<"\t\t_____|_____|_____\n";
    cout<<"\t\t     |     |     \n";
    cout<<"\t\t     |     |     \n";
    cout<<"\t\t  "<<board[2][0]<<"  |  "<<board[2][1]<<"  |   "<<board[2][2]<<"  \n";
    cout<<"\t\t     |     |     \n";
    cout<<"\t\t     |     |     \n";
}
void player_turn()
{
    int choice;
    if(turn=='X')
    {
        cout<<"\n\t  PLAYER[1]==O's turn";
    }
    if(turn=='O')
    {
        cout<<"\n\t  PLAYER[2]==X's turn";
    }
    cin>>choice;
    switch(choice)
    {
        case 1:row=0; column=0; break;
        case 2:row=0; column=1; break;
        case 3:row=0; column=2; break;
        case 4:row=1; column=0; break;
        case 5:row=1; column=1; break;
        case 6:row=1; column=2; break;
        case 7:row=2; column=0; break;
        case 8:row=2; column=1; break;
        case 9:row=2; column=2; break;
        default:
        cout<<"Invalid input";
        break;
    }
   if(turn=='X' && board[row][column]!='X' && board[row][column]!='O')
   { 
       board[row][column]=='X';
       turn='O';
   }
   else if(turn=='O' && board[row][column]!='X' && board[row][column]!='O')
   { 
       board[row][column]=='O';
       turn='X';
   }
   else
   {
       cout<<"Box already filled!\nplease try again!!";
       player_turn();
   }
   display_board();
}
int gameover()
{
    for(int i=0;i<3;i++)
    {
        if(board[i][0]==board[i][1] && board[i][0]==board[i][2] || board[0][i]==board[1][i] && board[0][i]==board[2][i])
        return 0;
        else if(board[0][0]==board[1][1] && board[0][0]==board[2][2] || board[0][0]==board[1][1] && board[0][0]==board[2][2])
        return 0;
    }
    for(int i=0;i<3;i++)
    {
        for(int j=0;j<3;j++)
        {
            if(board[i][j]!='X' && board[i][j]!='O')
            return 1;
        }
    }
    draw=1;

    return 0;
}


int main()
{
    system("cls");
    while(gameover())
    {
    display_board();
    player_turn();
    gameover();
    }
    return 0;
}


if(turn=='X' && draw=0)
{
    cout<<"PLAYER[2] WINS!!!";
}
else if(turn=='O' && draw==0)
{
    cout<<"PLAYER[1] WINS!!!";
}
else
{
    cout<<"GAMEDRAW!!!";
}

, 👍-2

Обсуждение

В какой строке вы получили ошибку?, @Michel Keijzers

Это не код Arduino, а код C++ для ПК. Для Arduinos нет ни cin, ни cout., @chrisl

if после основной функции не находится в функции, @Juraj

Это вообще вопрос? Или это просто сообщение с каким-то случайным кодом в игре «угадай, где ошибка»? Почему люди даже прилагают какие-либо усилия, чтобы ответить, когда ОП даже не удосужился приложить какие-либо усилия к ошибочному «вопросу»?, @GMc


1 ответ


2

Этот фрагмент находится вне функции:

if(turn=='X' && draw=0)
{
    cout<<"PLAYER[2] WINS!!!";
}
else if(turn=='O' && draw==0)
{
    cout<<"PLAYER[1] WINS!!!";
}
else
{
    cout<<"GAMEDRAW!!!";
}

Другие замечания:

  1. Вместо нескольких операторов return лучше создать локальную переменную, установить ее и вернуть ее в конце. Поэтому используйте только один оператор return для каждой функции (которая имеет возвращаемое значение).

  2. Как упоминает Крисл: у Arduino нет cin или cout. Используйте для этого класс Serial.

  3. Вы можете заменить следующий код:

Переключатель
 switch(choice)
 {
    case 1:row=0; column=0; break;
    case 2:row=0; column=1; break;
    case 3:row=0; column=2; break;
    case 4:row=1; column=0; break;
    case 5:row=1; column=1; break;
    case 6:row=1; column=2; break;
    case 7:row=2; column=0; break;
    case 8:row=2; column=1; break;
    case 9:row=2; column=2; break;

от

row    = (int) ((choice - 1) / 3);
column =        (choice - 1) % 3;
  1. Используйте перечисление в качестве возвращаемого типа для функции gameover() Например, EGameState { Running, PlayerOneWon, PlayerTwoWon, Draw};

    Это также удаляет глобальную переменную draw.

  2. Вы вызываете функцию gamover дважды, один раз в цикле while, не проверяя результат.

  3. Не используйте char для переменной turn, используйте только номер игрока, логическое значение (XPlayerHasTurn) или перечисление.

,

Для человека, отрицающего мой ответ, почему?, @Michel Keijzers

1. это не Arduino 2. это просто опечатка. Я думаю, что мы должны применить здесь, на Arduino SE, это «правило» StackOverflow https://meta.stackoverflow.com/questions/252256/behavior-on-questions-caused-by-typographical-errors, @Juraj

Полностью согласен с 1, но я не вижу, что является опечаткой в этой задаче (если вы не имеете в виду, что это может быть неправильно скопировано/вставлено). Однако его можно легко преобразовать в Arduino (заменив cin/cout вызовами класса Serial)., @Michel Keijzers

по аналогии, в Movies SE вопросы идентификации фильма не по теме. потому что это было бесконечное количество тривиальных вопросов, @Juraj

Итак, только замечание о cin/cout для класса Serial относится к Arduino (но на самом деле это не был сам вопрос). В следующий раз я просто сделаю замечание и проголосую за закрытие., @Michel Keijzers

согласно моему комментарию выше, зачем вам прикладывать какие-либо усилия к «вопросу», в котором ОП был чрезвычайно ленив к а) казалось бы, случайно выбранному Arduino SE, когда код не предназначен для Arduino, слишком ленив, чтобы на самом деле объяснить эту проблему, слишком ленив даже попытаться найти опечатку, слишком ленивы для форматирования кода и, вероятно, слишком ленивы, чтобы принять ваш ответ +1 за ваш ответ (хороший ответ) +2 для @juraj за попытку сохранить сайт в чистоте. -10 (если бы я мог) к ОП., @GMc