【发布时间】:2016-04-10 03:20:03
【问题描述】:
我正在尝试使用 C 退出 while loop,但使用中断、返回或更改 while 条件不起作用。
基本上,我想知道为什么在最后一个else if 中,当我声明back = true 时,我的代码一直输入for。
我希望输出如下:enter1, enter1, enter1, enter1, enter2。
相反,输出类似于enter1, enter1, enter1, enter2, enter2, enter2, enter1, enter1, enter1....
这是我的代码工作:
void SolveMap8(Core* core_building, Building* new, Stack* solve, bool goingBack){
Core* coreBuilding = core_building;
Building* first = new -> linked[0];
Building* next = NULL;
bool back = goingBack;
while (back == false) {
for (int i = 0; i < (first -> zone -> building_count); i++) {
if (first -> zone -> buildings[i] != NULL) {
if (first != first -> zone -> buildings[i]) {
next = first -> zone -> buildings[i];
if(next -> color == coreBuilding -> buildings[0] -> color && !city_client_is_taken(next)) {
puts("enter0");
Building_Pair* newPair = Building_Tuple_Create(first, next);
stack_push(solve, newPair);
city_client_link(first, next);
break;
}
else if(!city_client_is_taken(next)) {
if (city_client_is_blank(next)) {
if (!(next -> cored)) {
puts("enter1");
Building_Pair* newPair = Building_Tuple_Create(first, next);
stack_push(solve, newPair);
city_client_link(first, next);
SolveMap8(coreBuilding, next, solve, false);
}
}
}
else if (city_client_is_taken(next)) {
if (i == first -> zone -> building_count - 1) {
puts("enter2");
back = true;
}
}
}
}
}
}
}
【问题讨论】:
-
测试
back == false将在您的for循环终止之前完成。也许在你的if(city_client_is_taken(next))分支中,你想说back = true然后break;? -
设置
back = true之前的if (i == first -> zone -> building_count - 1)条件意味着这只会发生在for循环的最后一次迭代中,因此不需要break。 -
尝试在
for循环的每次迭代中打印i的值,并在循环之前打印first->zone->building_count的值。这应该让您更好地了解正在发生的事情。 -
SolveMap8是否有可能被多次调用? -
请注意,箭头
->和点.运算符绑定得非常紧密,不应该用空格与其操作数分开。也就是说,您的行if(next -> color == coreBuilding -> buildings[0] -> color && !city_client_is_taken(next))应该是if (next->color == coreBuilding->buildings[0]->color && !city_client_is_taken(next))(也请注意关键字后面的空格)。
标签: c for-loop while-loop