Skip to content

第 5 章:循环结构

本章能学到什么

  • for 循环的 C++ 写法(和 Python 差别较大)
  • while 循环
  • do-while(一句话带过)
  • breakcontinue

for 循环:三段式

Python 的 for i in range(5) 在 C++ 里长这样:

cpp
for (int i = 0; i < 5; i++) {
  Serial.println(i);
}

三段含义:

部分作用对应 Python
int i = 0循环变量初始化range 的起点 0
i < 5继续循环的条件range 的终点(不含 5)
i++每轮结束后做的事range 的步长 1

再举几例对照:

cpp
for (int i = 1; i <= 5; i++)     // 1,2,3,4,5     ~ range(1, 6)
for (int i = 0; i < 10; i += 2)  // 0,2,4,6,8     ~ range(0, 10, 2)
for (int i = 10; i > 0; i--)     // 10,9,...,1    ~ range(10, 0, -1)

while 循环:和 Python 几乎一样

cpp
int count = 0;
while (count < 3) {
  Serial.println("测量一次距离");
  count++;              // 千万别忘!否则死循环
}

do-while 一句话带过:先执行一次循环体再判断条件(do { ... } while (条件);),用得很少,知道有它就行。

break 和 continue

和 Python 完全一样:

cpp
for (int i = 0; i < 10; i++) {
  if (i == 3) continue;   // 跳过本轮
  if (i == 7) break;      // 结束循环
  Serial.println(i);
}
// 输出:0 1 2 4 5 6

Arduino 特有的"循环":loop()

别忘了:loop() 函数本身就是个无限循环。所以"让 LED 一直闪"有两种写法:

cpp
// 写法 A:靠 loop() 自己循环(推荐)
void loop() {
  digitalWrite(25, HIGH);
  delay(500);
  digitalWrite(25, LOW);
  delay(500);
}

// 写法 B:在 loop 里再套 while(true)(不常用)
void loop() {
  while (true) {
    // ...
  }
}

常见坑

  • for 的三段之间是分号不是逗号:for (int i = 0; i < 5; i++)
  • while 忘更新条件变量 → 死循环,板子看起来"卡死"
  • 循环变量 i 只在 {} 内有效(作用域),出了花括号就不能用了

想一想

loop()while(true) 功能上都让代码反复执行,为什么 Arduino 还要专门设计一个 loop()?(提示:想想 setup() 的存在价值)

💡 查看答案

为了把程序分成清晰的两半:setup() 只执行一次(初始化),loop() 反复执行(干活)。如果没有这个分工,初始化代码就得自己想办法"只跑一次",程序结构会乱。另外,框架在每次 loop() 之间还能顺便处理一些后台事务(比如串口通信),全都写在 while(true) 里就没这个机会了。

不积跬步,无以至千里;万里之行,始于当下。