Ziglings 笔记 13: Continue 语句的“安全网”
避免死循环的陷阱
在 Ziglings 的第 13 个练习中,我们终于明白了为什么 Zig 要给 while 循环加上那个独特的“冒号后缀”(步进表达式)。
在编程中,我们经常需要跳过某些特定的迭代,这时就会用到 continue 语句。但在传统的 while 循环中,continue 往往是死循环的罪魁祸首。
挑战:跳过 3 和 5 的倍数
任务是打印 1 到 20 之间的数字,但遇到 3 的倍数或 5 的倍数时要跳过打印。
解决方案
这是利用 Zig 特性写出的安全代码:
const std = @import("std");
pub fn main() void {
var n: u32 = 1;
// 关键点:步进逻辑 (n += 1) 被放在了 continue 表达式中
while (n <= 20) : (n += 1) {
// 取模运算:如果余数为 0,说明是倍数
if (n % 3 == 0) continue;
if (n % 5 == 0) continue;
// 只有非倍数才会执行到这一行
std.debug.print("{} ", .{n});
}
std.debug.print("\n", .{});
}
核心知识点总结
1. 步进表达式的真正威力
在这个例子中,当 n 等于 3 时,if (n % 3 == 0) continue; 被触发。
- 如果这是 C 语言:程序会直接跳回
while开头,而此时n还是 3,条件依然满足,再次进入循环… 导致死循环。 - 在 Zig 中:
continue会先跳转执行: (n += 1),把n变成 4,然后再去检查条件。完美避开了死循环!
2. continue 语句
它的作用是“立即结束本次循环,进入下一轮”。配合 Zig 的语法,它变得既好用又安全。
3. 取模运算符 %
这是数学运算的基础。
n % m返回n除以m的余数。- 常用于 FizzBuzz 类的问题,或者判断奇偶性。
后续预告:While 循环我们已经玩得很溜了。是时候看看 Zig 中的另一种循环方式了——专门用于迭代的 for 循环。