while 循环 C++ 结束,但不继续到其余语句
While loop in C++ ends, but doesn't continue onto the remaining statements
这是我正在努力制作的TicTacToe游戏的while循环,
while (result == 0)
{
game.player_move();
result = game.check_draw();
game.computer_move();
}
if (result == 1)
cout << "Tie.";
这些是CCD_ 1的条件。
int TicTacToe::check_draw()
{
if (move_count == 9)
return 1;
else
return 0;
}
此外,这段代码确实按照我希望的方式工作。X设置为值88,0设置为值79。用户和计算机移动功能都会将move_count
值增加一个,如下所示:
void TicTacToe::player_move()
{
int position;
draw_table();
cout << endl << "Pick position[1-9]: ";
cin >> position;
while (pos[position - 1] == 79 || pos[position - 1] == 88)
{
system("CLS");
draw_table();
cout << endl << "Position taken.";
Sleep(500);
system("CLS");
draw_table();
cout << endl << "Pick position[1-9]: ";
cin >> position;
system("CLS");
}
position[pos - 1] = 88;
move_count++; // <-------------
system("CLS");
}
和
void TicTacToe::computer_move()
{
int position;
srand((unsigned int)time(0));
position = (rand() % 9) + 1;
while (pos[position - 1] == 79 || pos[position - 1] == 88)
position = (rand() % 9) + 1;
position[pos - 1] = 79;
move_count++; // <-------------
}
由于玩家先行,在第9个回合之后,move_count
被设置为9。然后程序继续执行下一个语句。
if (result == 1)
cout << "Tie.";
此代码运行良好,但ONLY如果game.computer_move()
中的以下代码被删除,
while (pos[position - 1] == 79 || pos[position - 1] == 88)
position = (rand() % 9) + 1;
删除此代码后,while循环结束,并继续执行下一个if语句。然而,当我添加此代码时,它确实结束了while循环,但不会继续到if语句,并显示闪烁的光标。所有这些代码所做的就是检查一个数组,看看X a.k.a(88(或O a.k.a(79(是否已经被放置在要放置0的位置。
我非常困惑,因为这根本不会影响move_count
,而且在第9个玩家移动后,move_count
被设置为9,这意味着循环应该正确终止,甚至不会移动到game.computer_move()
?
我的理解是,一旦不满足while条件,while循环中的其余代码就会被忽略,循环应该结束。
我做了
cout << game.move_count;
在循环中,就在game.check_draw()
之前,检查它是否有值9,事实上确实有。
还有一条附带评论。我的代码可读吗?它有什么明显的问题吗?
如果有要求,我可以发布整个代码,并感谢您提前回复。
我的理解是,一旦不满足while条件,while循环中的其余代码将被忽略,循环应该结束
这是不正确的。while
循环仅在循环的下一次迭代(在结束时(之前检查条件是否满足。如果在循环的中间不满足条件,它将继续,直到循环的当前迭代结束,然后脱离循环。如果您希望在满足条件后立即结束循环,则可以使用break语句来中断循环。
来自cppreference:
在每次迭代之前对该表达式求值,如果它产生false,则退出循环。
- 我的简单if-else语句是如何无法访问的代码
- 有一个打印语句的函数是一种糟糕的编程实践吗
- 线程,如果else语句,都是错误的上下文切换后,会发生什么
- 为什么是0;C++中的有效语句
- Insert函数不适用于2 if语句C++
- If语句未被求值C++
- C++嵌套if语句,基本货币交换
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- 是否可以使用if constexpr删除控制流语句
- 无法理解此 return 语句的功能,没有它就会发生运行时错误
- 我似乎对if/else的基本语句有问题:/
- 当调用switch语句中的函数时(即使函数不包含循环),似乎是永不结束的循环的问题
- If语句在c++中被忽略
- 比较if语句中的数组值和int值
- 以在Qt中的IF语句中设置时间延迟
- Craps游戏问题,忽略if语句
- "类模板示例<int>;"语句对 C++11 是什么意思?
- 如何编写一个使用n倍三元条件语句的C++布尔函数
- 是``if`语句''在modulo之前和分配操作之前的冗余
- 在多个if语句中执行相同的操作,如何减少代码冗余