C++ if 语句未正确测试

C++ if statement is not testing correctly

本文关键字:测试 if 语句 C++      更新时间:2023-10-16

我正在尝试制作一个井字游戏,它可以工作到我可以插入Xs但计算机只能插入一个O的程度。由于这是一个井字游戏,我需要计算机能够插入多个零。每次运行此代码时,如果已经有一个变量的值为 o,它不会将另一个变量更改为值 o。我认为问题在于 if 语句。很抱歉没有清楚地说明我的问题。如果它仍然没有意义,您可以编译我的其余代码。那你也许会明白我的意思。

这是其余的

这就是我认为的问题所在。

bool j=true ;
int lo=0;
string hi [9]={a,b,c,d,e,f,g,h,i};
while(j==true)
{
  if (lo>8)
  {
    j=false;
  }
  else if(hi[lo]!="x"&&hi[lo]!="o")
  {
    hi[lo]="o";
    j=false;
  }
  else
  {
    lo=lo+1;
    j=true;
  }
}

如果我能重写你的代码:

for (lo = 0; lo < 9; lo++){
  if (hi[lo] == " "){
    hi[lo] = "o";
    break;
  }
}

所以你是对的,它插入了一个"o"。

问题出在哪里?

编辑:由于您正在尝试编写井字游戏,因此让我建议一些整体伪代码:

repeat
  ask user where they want to place an "x" (i.e. get a number from 0 to 8)
  if that square is not blank, say so and ask again
  else put the "x" in the square
  If this completes a row, column, or diagonal, exit saying "You win!"
-> enter the loop here if you are making the first move
  then find out where to put an "o". You do this by looking at all unoccupied squares.
  for each unoccupied square
    look at the row, column, and diagonal it is on
    if putting an "o" there would make you the winner, give it a really high score
    if putting an "o" there would block the user from winning, give it a high score
    if putting an "o" there would mean that you could win on the following move, give it a medium score
    Otherwise give it a score that is the number of rows, columns, and diagonals it could possibly tie up
    end for each
  Then put the "o" on the highest-scored square (or one of the highest-scored squares if there are more than one)
  If you completed a row, column, or diagonal, exit saying "I win!".
  If you can't find a square to mark, exit saying "I give up".
end repeat

我相信有比这更短的版本。它就在我头顶上。