Как сравнить и проверить в C ++, используя циклы и массив - PullRequest
0 голосов
/ 30 июля 2011

Вот мой новый отредактированный код. У меня возникли проблемы с моим последним циклом if для X и O, хранящимся в массиве. Я пытаюсь проверить, есть ли X или O уже внутри массива или нет. Если он есть, он запрашивает у пользователя другой ввод, а затем начинается снова, однако, когда я запускаю программу, это происходит:

1 | 2 | 3
4 | 5 | 6
7 | 8 | 9
Please Enter Box Number: 1
player X your number is 1
X | 2 | 3
4 | 5 | 6
7 | 8 | 9
Please Enter Box Number: 1
Please enter another Number2
player O your number is 1
O | 2 | 3
4 | 5 | 6
7 | 8 | 9
Please Enter Box Number:





char c;


        cout << "Please Enter Box Number: ";
        cin >> c;


        if (c > '9' || c < '0')
        {
            // error message
            cout << "please enter a number 1-9" << " ";
            cin >> c;
            cin.ignore(numeric_limits<int>::max(), '\n');

        }

        if (c < '9' || c > '0') 
        {
            int number = c - '0';

            if (board[number - 1] == 'X' || board[number - 1] == 'O') 
            {
                cout << "Please enter another Number";
                cin >> c;
                cin.ignore(numeric_limits<int>::max(), '\n');

            }
            else if (board[number -1] != 'X' || board[number - 1] != 'O' ) {
                if (player == 'X')
                { 
                    player = 'O';
                }
                else 
                {
                    player = 'X';
                }




                cout << "player " << player <<  " your number is " << number << endl;
                // Your implementation here...



                board[number - 1] = player;

            }


        }







    }

Ответы [ 3 ]

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

Первый второй вопрос (легкий):

Возврат из текущей функции. Таким образом, после возврата дальнейшие инструкции в вашей функции не выполняются. Вы должны удалить возврат и поместить оставшуюся часть кода (который не должен выполняться, если ввод недопустим) в блок else этого if.

Первый вопрос:

  • Почему вы проверяете, что индекс каждой позиции в массиве (как в board [7] = '8'). Вы уже знаете позицию, то, что вам нужно отметить в каждой ячейке, это игрок, который ее использует; например, установите значения «X» (игрок 1), «O» (игрок 2), «» (пусто).

  • Вместо девяти «если» будет проще, если вы преобразуете свой ввод «с» в целое число и будете использовать его в качестве индекса. С помощью символов ASCII (я не знаю, работает ли это по-прежнему с WCHAR, UTF-8 и т. Д.), Вы можете сделать это быстро и просто:

    int k = c - '0';

    board[k] = player;


Edit: С учетом проверки того, что площадь еще не используется:

int k = c - '0';
if (board[k] == ' ') {
  board[k] = player;
} else {
  cout << "This square is already used";
}
0 голосов
/ 30 июля 2011

http://www.asciitable.com/

Если вы посмотрите на таблицу ASCII, вы заметите, что все символы имеют десятичное значение для них.Поэтому, когда ваш учитель вычитает «0» из того, что ввел пользователь, произнесите «1», который он действительно делает:*

0 голосов
/ 30 июля 2011

Чтобы вернуться назад до тех пор, пока не будет введено правильное значение, вы можете сделать что-то вроде этого:

int number = 10;

while( ( number > 9 ) || ( number < 0 ) )
{
    std::cout << "Please Enter Box Number: ";
    std::cin >> number;
}

std::cout << "Your number is " << number << std::endl;

Я не слишком уверен, что вы спрашиваете о другой части.Я буду редактировать свой ответ, если / когда я это сделаю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...