do-while loop within for is not wokirng

do-while loop within for is not wokirng

本文关键字:not wokirng is for loop within do-while      更新时间:2023-10-16

我陷入了编写井字游戏的困境。我需要你的帮助。基本上,我的问题是,为什么我的do while循环在c++中的代码中不起作用。我正在使用VS C++2015。

背后的基本逻辑如下;

  1. 创建3乘3的数组,并将1-9作为char
  2. 设置一个for循环和if语句,让玩家输入X或O。如果i为0或偶数,则轮到玩家1输入X。如果奇数,则轮到选手2将O作为字符
  3. 在do-while循环中,我想检查玩家是否选择了已经选择的单元格。但do-white循环似乎根本不起作用
  4. 通过if语句检查一行中是否有3个X或O

请让我知道解决这个问题的关键点是什么。。。非常感谢!

#include <iostream>
#include "tic_tac_toe.h"
using namespace std;

int tic_tac_toe() {
    cout << "You chose tic tac toe game!:) n";
    char t[] = { '1', '2' ,'3' , '4', '5', '6', '7', '8', '9' };
    cout << "_" << t[0] << "_|_" << t[1] << "_|_" << t[2] << "_n";
    cout << "_" << t[3] << "_|_" << t[4] << "_|_" << t[5] << "_n";
    cout << " " << t[6] << " | " << t[7] << " | " << t[8] << " n";

    for (int i = 0; i < 9; i++) {
        if (i == 0 || i % 2 == 0) {
            cout << "Player 1, your trun. Please choose a number to put X. n";
            int n1;
            cin >> n1;
            do {
                cout << "You cannot overwrite on X or O. Please in put again. n";
                cin >> n1;
            } while (t[n1 - 1] == 'X' || t[n1 - 1] == 'O');
            t[n1 - 1] = 'X';
        }
        else {
            cout << "Player 2, your trun. Please choose a number to put O. n";
            int n2;
            cin >> n2;
            do {
                cout << "You cannot overwrite on X or O. Please in put again. n";
                cin >> n2;
            } while (t[n2 - 1] == 'X' || t[n2 - 1] == 'O');
            t[n2 - 1] = 'O';
        }


        cout << "_" << t[0] << "_|_" << t[1] << "_|_" << t[2] << "_n";
        cout << "_" << t[3] << "_|_" << t[4] << "_|_" << t[5] << "_n";
        cout << " " << t[6] << " | " << t[7] << " | " << t[8] << " n";
        if (t[0] == 'X' && t[1] == 'X' && t[2] == 'X' ||
            t[3] == 'X' && t[4] == 'X' && t[5] == 'X' || 
            t[6] == 'X' && t[7] == 'X' && t[8] == 'X' || 
            t[0] == 'X' && t[3] == 'X' && t[6] == 'X' || 
            t[1] == 'X' && t[4] == 'X' && t[7] == 'X' || 
            t[2] == 'X' && t[5] == 'X' && t[8] == 'X' ||
            t[0] == 'X' && t[4] == 'X' && t[7] == 'X' || 
            t[2] == 'X' && t[4] == 'X' && t[6] == 'X' ) {
            cout << "Player 1, you won! n";
            break;
        }
        else if(t[0] == 'O' && t[1] == 'O' && t[2] == 'O' ||
                t[3] == 'O' && t[4] == 'O' && t[5] == 'O' ||
                t[6] == 'O' && t[7] == 'O' && t[8] == 'O' ||
                t[0] == 'O' && t[3] == 'O' && t[6] == 'O' ||
                t[1] == 'O' && t[4] == 'O' && t[7] == 'O' ||
                t[2] == 'O' && t[5] == 'O' && t[8] == 'O' ||
                t[0] == 'O' && t[4] == 'O' && t[7] == 'O' ||
                t[2] == 'O' && t[4] == 'O' && t[6] == 'O' )
        {
            cout << "Player 2, you won! n";
            break;
        }

    }
    return 0;
}

您应该使用while而不是do…while

对于第一个玩家,你的代码应该是这样的

while (t[n1 - 1] == 'X' || t[n1 - 1] == 'O'){
    cout << "You cannot overwrite on X or O. Please in put again. n";
    cin >> n1;
} 

对于第二个玩家,

while (t[n2 - 1] == 'X' || t[n2 - 1] == 'O'){
    cout << "You cannot overwrite on X or O. Please in put again. n";
    cin >> n2;
}