C Day 14

该结束时结束,
该跳过时继续前进

今天学习循环中的 breakcontinue,比较结束整个循环和跳过当前一轮的不同路线,并用二者完成累计综合练习。

break 会结束整个当前循环

第 11 天曾在 switch 中使用 break。今天把它放进 for:条件命中后,当前循环立即结束,不会再产生后面的轮次,但循环外的代码仍然继续执行。

day14.c
for (int number = 1; number <= 5; number++)
{
    if (number == 3)
    {
        printf("遇到 3,结束循环\n");
        break;
    }

    printf("number = %d\n", number);
}

实际只输出 1 和 2。到第 3 轮时先输出结束提示,再执行 break,所以不会输出 number = 3,也不会再处理 4、5。

continue 只跳过当前一轮

continue 不会结束整个循环。它会跳过本轮剩余语句;在 for 中,接下来先执行每轮更新,再检查条件并决定是否进入下一轮。

day14.c
for (int value = 1; value <= 5; value++)
{
    if (value == 3)
    {
        printf("跳过 3\n");
        continue;
    }

    printf("value = %d\n", value);
}

因此 value = 3 不会输出,但循环仍会继续处理 4 和 5。这也是它与 break 最重要的区别。

在同一个循环中组合两条路线

综合练习从 1 循环到 10:遇到 3 时只跳过本轮;遇到 7 时结束整个循环。程序输出 1、2、4、5、6,不输出 3 和 7,也不会处理 8、9、10。

day14.c
for (int current = 1; current <= 10; current++)
{
    if (current == 3)
    {
        continue;
    }

    if (current == 7)
    {
        break;
    }

    printf("current = %d\n", current);
}

独立完成带跳过与停止的累计

最后独立编写累计程序:从 1 处理到 10,5 在累计前被跳过,9 在累计前结束循环。这样 5、9、10 都不会进入总和。

day14.c
int sum = 0;

for (int variable = 1; variable <= 10; variable++)
{
    if (variable == 5)
    {
        continue;
    }

    if (variable == 9)
    {
        break;
    }

    sum += variable;
    printf("加入 %d 后,sum = %d\n", variable, sum);
}

实际参与累计的是 1 + 2 + 3 + 4 + 6 + 7 + 8,中间结果依次为 1、3、6、10、16、23、31,最终总和是 31。预测与实际运行一致,程序正常退出,代码为 0。

今天真正掌握的内容

  • 知道 break 会立即结束整个当前循环
  • 知道 continue 只跳过当前一轮的剩余语句
  • 理解 for 遇到 continue 后先更新、再检查条件
  • 能判断 breakcontinue 后哪些代码仍会执行
  • 会在同一个循环中组合跳过与提前结束路线
  • 能独立把循环控制与累计逻辑组合成完整程序

下一步将学习 do ... while 和由用户输入控制的重复菜单;完成 C Day 15 后,C Day 16 将进行第二次阶段复习与检测。