gpt4 book ai didi

c - 跳出 C 中的循环

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

我正在尝试使用 C 退出 while 循环,但使用中断、返回或更改 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;
}
}
}
}
}
}
}

最佳答案

更新 抱歉,错过了递归。在那种情况下,您的问题与缺少 break 语句无关,而是您试图在与当前范围不同的范围内从 for 循环中逃脱。您将需要特殊的逻辑来处理全局“完成”条件。也许是这样的:

void process(Core* core, bool& done) {
for (int i = 0; i < core->size() && !done; ++i) {
if (!core[i]->is_taken()) {
process(core[i], done);
} else if (core[i]->is_taken() {
// done procesing
done = true;
}
}
}

// use via
bool done = false;
process(myCore, done);

在您拥有的版本中,goingBack 标志是按值传递的,因此每个函数都有自己的副本,并且无法在递归调用链中将 back 的值传递给父函数。在我上面的代码中, done 作为引用传递,因此在递归链中的某个点更改值将使它在父范围内可见(因为变量的范围在函数本身之外)。希望这对您更有帮助。

关于c - 跳出 C 中的循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36525373/

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