gpt4 book ai didi

C++ 井字游戏 : My code is doubling my outcome from my loop. 有什么问题?

转载 作者:太空宇宙 更新时间:2023-11-04 13:50:26 25 4
gpt4 key购买 nike

#include <iostream>
#include <cctype>
#include <ctime>
#include "Console.h"
using namespace System;
using namespace std;

int main()
{

// Console::SetCursorPosition(10,10 );

const int Rows = 3, Cols = 3;
char gameBoard[Rows][Cols]{
};

do
{

Console::Clear();


for (size_t row = 0; row < Rows; row++)
{
Console::SetCursorPosition(30, 10 + row);
for (size_t col = 0; col < Cols; col++)
{
cout << "|" << gameBoard[row][col];
}
cout << '|';
cout << "\n";


}
int rowInput;
int colInput;
Console::SetCursorPosition(28, 15);
cout << "Row (0 -> 2): ";
cin >> rowInput;

if (cin.fail() == true)
{
cin.clear();
cin.ignore(INT_MAX, '\n');
}

else if (rowInput <= 0 || rowInput >= 3)
break;

Console::SetCursorPosition(28, 16);
cout << "Col (0 -> 2): ";
cin >> colInput;
do
{
if (gameBoard[rowInput][colInput] == 'X' || gameBoard[rowInput][colInput] == 'O'){
cout << "That is already taken";
cin.clear();
cin.ignore(INT_MAX, '\n');

}
else {
break;
}
} while (true);
gameBoard[rowInput][colInput] = 'X';
// system("pause");
// return 0;
cout << "\n";
} while (true);



system("pause");
return 0;
}

输出两次的代码是:

do
{
if (gameBoard[rowInput][colInput] == 'X' || gameBoard[rowInput][colInput] == 'O'){
cout << "That is already taken";
cin.clear();
cin.ignore(INT_MAX, '\n');

}
else {
break;
}
} while (true);

这是我的 Tic Tac Toe 游戏的一部分,但我不确定为什么它会打印两次“This is already taken”。任何帮助表示赞赏。如果有人能告诉我,我希望收到的另一个提示是如何让游戏选择一个随机点供 AI 选择。

最佳答案

您可以很容易地在此处遵循代码。通过 Windows 调试单步执行应该可以解决问题。

  1. 因此,我们输入行值和列值。因为在执行 cin >> colInput 之后您没有执行 cin.ignore 输入流上仍然有一个 \n
  2. 我们检查棋盘的那部分是否已经填满。让我们假设它是。
  3. 我们输出消息(我注意到最后没有换行符)
  4. 我们通过忽略直到最后一个 \n 的所有内容来清除 cincin 现在是空的。
  5. 我们到达 while (true)
  6. 我们检查棋盘的那部分是否已经填满。它仍然是!我们还没有改变我们的位置!
  7. 我们输出消息(我注意到最后没有换行符)
  8. 我们通过忽略直到最后一个 \n 的所有内容来清除 cin。因为 cin 为空,这导致程序等待直到返回 enter。

如您所见,您已陷入无限循环。需要重新考虑 do...while 循环。

do
{
/* 2 and 6 */ if (gameBoard[rowInput][colInput] == 'X' || gameBoard[rowInput][colInput] == 'O'){
/* 3 and 7 */ cout << "That is already taken";
/* 4 and 8 */ cin.clear();
cin.ignore(INT_MAX, '\n');

}
else {
break;
}
/* 5 */ } while (true);

关于C++ 井字游戏 : My code is doubling my outcome from my loop. 有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23663798/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com