From 427fcdc9398e12f6bd47c8e014ce5aff9903e0c0 Mon Sep 17 00:00:00 2001 From: lilhammer Date: Fri, 20 Feb 2026 15:58:56 +0800 Subject: [PATCH 1/2] =?UTF-8?q?docs(loop):=20=E6=94=B9=E8=BF=9B=20while=20?= =?UTF-8?q?=E5=BE=AA=E7=8E=AF=20continue=20=E8=A1=A8=E8=BE=BE=E5=BC=8F?= =?UTF-8?q?=E7=AB=A0=E8=8A=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 重写 continue 表达式的说明,结合基本示例中的死循环问题, 解释 continue 表达式的执行时机和作用。 --- course/basic/process_control/loop.md | 21 ++++++++++++++++++++- course/code/15/loop.zig | 13 +++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/course/basic/process_control/loop.md b/course/basic/process_control/loop.md index aa098c97..eb709641 100644 --- a/course/basic/process_control/loop.md +++ b/course/basic/process_control/loop.md @@ -98,7 +98,26 @@ for 循环是另一种循环处理方式,主要用于迭代数组和切片。 ### `continue` 表达式 -`while` 循环还支持一个被称为 `continue` 表达式的机制,以便于我们控制循环。其内部可以是一个语句或一个代码块(由 `{}` 包裹)。 +`while` 循环的条件之后可以用冒号 `:` 跟一个括号来声明 **`continue` 表达式**,它会在**每轮循环体结束后、下一轮条件判断之前**自动执行: + +<<<@/code/release/loop.zig#while_continue_fix + +每轮循环的执行顺序是: + +1. 检查条件 `i < 10` +2. 执行循环体 +3. 执行 `continue` 表达式 `i += 1` +4. 回到第 1 步 + +相信看到这里,细心的读者可能已经发现了,在上面的 while 基本使用示例中,当循环执行到 `i == 5` 时,**代码会陷入死循环**。 + +而 `continue` 表达式会帮助我们完美地避开这个问题,不难发现,即使循环执行到 `i == 5` 时,`i` 的自增仍然会在 `continue` 表达式内执行。 + +:::info 🅿️ 提示 +唯一不执行 `continue` 表达式的情况是 `break`,因为 `break` 直接退出整个循环。 +::: + +另外,`continue` 表达式可以是单个语句,也可以是多个语句(用 `{}` 包裹),示例如下: :::code-group diff --git a/course/code/15/loop.zig b/course/code/15/loop.zig index 2f0c520f..ab2b194a 100644 --- a/course/code/15/loop.zig +++ b/course/code/15/loop.zig @@ -171,7 +171,20 @@ const WhileBasic = struct { }; const WhileContinue = struct { + const std = @import("std"); + pub fn main() void { + { + // #region while_continue_fix + // 将while语句的基础代码用continue表达式改写 + var i: usize = 0; + while (i < 10) : (i += 1) { + if (i == 5) continue; + std.debug.print("i is {}\n", .{i}); + } + // #endregion while_continue_fix + } + { // #region while_continue_1 var i: usize = 0; From 6d12e71b06ce9cf58cf42c51b9a4b101a4dafa4a Mon Sep 17 00:00:00 2001 From: Dylan Date: Fri, 20 Feb 2026 16:44:12 +0800 Subject: [PATCH 2/2] Update course/basic/process_control/loop.md Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> --- course/basic/process_control/loop.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/course/basic/process_control/loop.md b/course/basic/process_control/loop.md index eb709641..d29459d7 100644 --- a/course/basic/process_control/loop.md +++ b/course/basic/process_control/loop.md @@ -114,7 +114,7 @@ for 循环是另一种循环处理方式,主要用于迭代数组和切片。 而 `continue` 表达式会帮助我们完美地避开这个问题,不难发现,即使循环执行到 `i == 5` 时,`i` 的自增仍然会在 `continue` 表达式内执行。 :::info 🅿️ 提示 -唯一不执行 `continue` 表达式的情况是 `break`,因为 `break` 直接退出整个循环。 +除了 break 以外,return 也会导致 continue 表达式不执行,因为它们都会直接跳出循环。 ::: 另外,`continue` 表达式可以是单个语句,也可以是多个语句(用 `{}` 包裹),示例如下: