运算符break和continue用于循环结构(for,while,do..while)中以控制执行流。
细节:
break只会退出最内层的循环。goto结合使用可以复杂地影响逻辑。while和do..while循环中使用continue可能会导致意外的控制流转移,如果不考虑操作的顺序。示例:
for (int i = 0; i < 5; ++i) { if (i == 2) continue; if (i == 4) break; printf("%d ", i); } // 输出:0 1 3
如果循环中使用了复杂表达式来初始化和更新计数器,使用
continue时会发生什么?
常见错误答案:
许多人认为当continue触发时,循环结构中的所有表达式(例如for中的递增)都不会执行。
正确答案:
在for循环中,达到continue时,循环体的剩余部分被跳过,但是更新计数器的表达式(for中的第三部分)仍然会被执行:
for (int i = 0; i < 3; printf("step %d ", i), ++i) { if (i == 1) continue; printf("%d ", i); }
输出:
0
step 0
step 1
2
step 2
故事
在遍历数组的循环中使用continue时,忘记以显式方式更新计数器参数(在while循环中),导致了无限循环。
故事
嵌套循环在第一次匹配时触发break,但程序员预期整个循环会中断,结果未能正确处理其他元素。
故事
在使用continue的do..while结构中,跳过了在进入下一次迭代之前的关键结束操作,导致由于状态变化错误而丢失数据。