Zig 语言提供了多种循环结构,用于执行重复操作,常见的循环包括:
while
循环for
循环(用于遍历数组、切片等)loop
无限循环break
和continue
控制循环流程
📖 目录
1. while
循环
while
循环在条件满足的情况下持续执行,适用于条件控制的场景。
🔹 语法
while (条件) : (继续执行代码) {
// 循环体
}
🔹 示例
var i: i32 = 0;
while (i < 5) {
std.debug.print("i = {}\n", .{i});
i += 1;
}
输出:
i = 0
i = 1
i = 2
i = 3
i = 4
⚠️ 注意:
while
的条件必须返回bool
类型,否则编译器会报错。- 避免死循环,确保条件能够在循环内变化。
2. for
循环
for
循环用于遍历数组、切片、元组(tuples)、结构体等,适用于数据迭代的场景。
🔹 语法
for (集合) |item| {
// 处理 item
}
🔹 遍历数组
const arr = [_]i32{10, 20, 30, 40};
for (arr) |value| {
std.debug.print("Value: {}\n", .{value});
}
输出:
Value: 10
Value: 20
Value: 30
Value: 40
🔹 遍历数组(带索引)
for (arr, 0..) |value, index| {
std.debug.print("Index: {}, Value: {}\n", .{index, value});
}
输出:
Index: 0, Value: 10
Index: 1, Value: 20
Index: 2, Value: 30
Index: 3, Value: 40
0..
代表索引从 0 开始递增,可以用于获取索引。for
不能用于普通整数范围,必须是可迭代的集合。
3. loop
无限循环
loop
语句创建无限循环,通常需要配合 break
使用,否则会导致死循环。
🔹 语法
loop {
// 代码
}
🔹 示例
var counter: i32 = 0;
loop {
std.debug.print("Counter: {}\n", .{counter});
counter += 1;
if (counter == 5) break;
}
输出:
Counter: 0
Counter: 1
Counter: 2
Counter: 3
Counter: 4
⚠️ loop
必须手动 break
,否则会进入死循环!
4. break
退出循环
break
用于立即终止当前循环,无论循环条件是否仍然满足。
🔹 示例
var x: i32 = 0;
while (x < 10) {
if (x == 5) break; // 当 x 等于 5 时,退出循环
std.debug.print("x = {}\n", .{x});
x += 1;
}
输出:
x = 0
x = 1
x = 2
x = 3
x = 4
5. continue
跳过本次循环
continue
用于跳过本次循环的剩余部分,直接进入下一次循环。
🔹 示例
var i: i32 = 0;
while (i < 5) {
i += 1;
if (i == 3) continue; // 跳过 3
std.debug.print("i = {}\n", .{i});
}
输出:
i = 1
i = 2
i = 4
i = 5
解释:
- 当
i == 3
时,continue
跳过print
语句,直接进入下一次循环。
6. 带标签的循环
Zig 允许在循环前加 :
标签(Label),用于 break
或 continue
退出特定的外部循环。
🔹 示例
outer: while (true) {
var j: i32 = 0;
while (j < 3) {
std.debug.print("j = {}\n", .{j});
if (j == 1) break :outer; // 直接跳出外部 `while`
j += 1;
}
}
输出:
j = 0
j = 1
解释:
break :outer;
直接跳出outer
循环,而不是while (j < 3)
内部循环。
7. 参考资料
🔹 总结
语法 | 说明 |
---|---|
while (条件) {} | 条件为 true 时执行 |
`for (集合) | item |
loop {} | 无限循环(需要 break 退出) |
break | 终止循环 |
continue | 跳过当前循环,执行下一次 |
break :label | 退出特定循环 |
Zig 提供灵活的循环机制,适用于不同的场景,在使用时要避免死循环,合理利用 break
和 continue
进行流控制! 🚀
发表回复