我目前正在使用Stack存储我的动作,在c ++中使用Knight tour Chessboard游戏。我遇到了一个不会结束程序的奇怪循环。任何人都可以帮我代码吗?
npm install --global --production windows-build-tools
我刚刚创建的一些部分用于调试并查看每个函数的工作方式,因此忽略这些部分。 循环总是继续,似乎永远不会结束。我试图跟踪堆栈中的数据,但这对我来说似乎是合理的。
任何帮助都将不胜感激。
答案 0 :(得分:1)
查看代码的这一部分时:
for ( int j = 0; j < 9; j++ ) {
if ( check_if_valid(position.row+Lshape.Lrow[j],position.col+Lshape.Lcol[j]) /*&& check_empty(board,position)*/) {
// code...
if ( checkEmpty( board, hello ) {
// code...
j = -1;
if ( isReady(position, board) == true ) { // == true not needed
// code...
}
}
}
if ( j == 8 ) {
// code...
j = counter.top()
// code...
if ( isReady(position, board) == true ) { // == true not needed
// code...
}
}
} // for loop
当条件返回true时,考虑for循环中1 st 嵌套if语句中发生的情况。您正在将j
更改为-1
。
再次在for循环中的2 nd if语句中j==8
再次将j
更改为counter.top()
。
此行为将导致for循环的无限递归。这是一个简单的例子:
#include <iostream>
#include <iomanip>
int main() {
int counter = 0;
for ( int i = 0; i < 5; i++ ) {
if ( i == 4 ) {
i = 0;
}
++counter;
std::cout << "Count the recursion: "
<< std::setw( 2 ) << counter << " " << i << '\n';
// just to stop the recursion
if ( counter == 10 ) break;
}
std::cout << "\nPress any key and enter to quit.\n";
std::cin.get();
return 0;
}
没有最后if
语句的上述程序将模拟程序中发生的情况。我只包括那个,以便停止循环只是为了显示输出的进展。
我不知道你是否故意想要for循环的无限递归;但是如果你这样做,你需要在调试器中检查你的计数器变量,以确保它们匹配执行退出循环所涉及的语句所需的值以停止递归。正如我在上面的小例子中所示;没有计数器的条件等于10
。循环将永远持续下去。
作为旁注,如果你打算有一个无限循环;通过这种方式构建它们通常更好,这样就可以更清楚地了解你的目的。
int counter = 0;
for ( ; ; ) {
++counter;
// do some work;
if ( counter == exit condition ) break;
}
或
int counter = 0;
for ( ; ; ) {
// do some work;
if work above is valid
increment counter
else
break;
}
或者您可以使用while循环
counter = some value
while ( true ) {
check counter for condition;
do some work
increment or set counter;
}