3、C++基础语法(下):流程控制与循环

好,咱们接着聊。上一章我们把变量、运算符、类型这些“砖块”码好了,这一章就该聊聊怎么让这些砖块“动起来”。说白了,就是让程序能做判断、能反复干活。这就是流程控制和循环。

我个人觉得,流程控制是代码真正开始有“灵魂”的地方。没有它,代码就是一潭死水,从上往下执行一遍就完了。有了它,代码才能根据不同的情况做出不同的反应。

C++ 流程控制与循环知识体系 分支结构 if / else if / else switch / case 循环结构 for 循环 while 循环 do-while 循环 控制关键字 break continue

一、if/else:最朴素的判断

if/else 是 C++ 里最基础、最常用的判断结构。它的逻辑很简单:如果条件成立,就做 A;否则,就做 B

int score = 85;
if (score >= 60) {
    cout << "及格了" << endl;
} else {
    cout << "不及格" << endl;
}

嗯,这里要注意:if 后面的条件必须用括号括起来。而且,哪怕只有一行代码,我也建议你加上花括号 {}。为什么?

我曾经在项目里见过一个 bug,就是因为少写了花括号,导致逻辑完全跑偏。你想想看,如果后面维护的人加了一行代码,没注意缩进,那后果就是灾难性的。

我的习惯: 只要用 if/else,一律加花括号。哪怕只有一行。这能省掉很多不必要的麻烦。

二、switch:多路分支的利器

当判断条件特别多的时候,if/else 写起来会显得很啰嗦。这时候,switch 就派上用场了。

int day = 3;
switch (day) {
    case 1:
        cout << "周一" << endl;
        break;
    case 2:
        cout << "周二" << endl;
        break;
    case 3:
        cout << "周三" << endl;
        break;
    default:
        cout << "其他" << endl;
        break;
}

switch 的每个 case 后面都要跟一个 break,否则会“穿透”到下一个 case。这个特性有时候会被故意利用,但大多数情况下,忘了写 break 就是个坑。

注意: switch 只能判断整型、字符型、枚举型,不能判断浮点数或字符串。如果你需要判断浮点数范围,老老实实用 if/else。

三、for 循环:最常用的循环

for 循环是 C++ 里最灵活的循环。它的结构是:初始化 → 条件判断 → 循环体 → 更新

for (int i = 0; i < 5; i++) {
    cout << "第 " << i << " 次循环" << endl;
}

我个人习惯把 for 循环用在“我知道要循环多少次”的场景。比如遍历数组、处理固定次数的任务。

我记得有一次写一个数据处理模块,需要遍历一个很大的数组。一开始我用 while 循环,结果忘了写自增,直接死循环了。后来改成 for 循环,把自增写在括号里,再也没出过这种问题。

核心要点: for 循环的三个部分(初始化、条件、更新)都可以省略,但分号不能省。如果三个都省略,就成了死循环:for(;;)

四、while 循环:条件驱动

while 循环的逻辑更简单:只要条件成立,就一直执行

int count = 0;
while (count < 5) {
    cout << count << endl;
    count++;
}

while 循环适合用在“不知道要循环多少次,但知道什么时候停止”的场景。比如读取文件直到结束、等待用户输入特定值。

避坑指南: 我曾经在 while 循环里忘了更新条件变量,结果程序跑起来直接卡死。CPU 占用率飙到 100%,最后只能强制结束进程。所以,一定要确保循环条件能在某个时刻变为 false

五、do-while 循环:至少执行一次

do-while 和 while 的区别在于:do-while 先执行一次循环体,再判断条件。也就是说,它至少会执行一次。

int num = 0;
do {
    cout << "请输入一个正数: ";
    cin >> num;
} while (num <= 0);

这个例子很典型:我们想让用户输入一个正数,如果输入不对就重新输入。用 do-while 就很自然——先让用户输入一次,不对再继续。

说实话,do-while 在实际项目里用得不算多。但一旦遇到“至少执行一次”的场景,它就是最优雅的解法。

六、break 与 continue:循环的“刹车”和“跳过”

这两个关键字是循环里的控制利器。

  • break:立即跳出整个循环。不管循环条件是否满足,直接结束。
  • continue:跳过本次循环的剩余部分,直接进入下一次循环。
// break 示例:找到第一个偶数就停止
for (int i = 1; i <= 10; i++) {
    if (i % 2 == 0) {
        cout << "找到偶数: " << i << endl;
        break;
    }
}

// continue 示例:跳过奇数,只打印偶数
for (int i = 1; i <= 10; i++) {
    if (i % 2 != 0) {
        continue;
    }
    cout << i << " 是偶数" << endl;
}

break 和 continue 的区别,说白了就是:break 是“我不干了,全剧终”;continue 是“这次我不干了,下次继续”

我的建议: 不要滥用 break 和 continue。如果循环里嵌套了太多 break 或 continue,代码会变得很难读懂。能用条件判断解决的问题,尽量别用跳转。

七、综合示例:猜数字游戏

咱们把今天学的知识串起来,写一个简单的猜数字游戏。

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

int main() {
    srand(time(0));
    int target = rand() % 100 + 1;  // 1~100 随机数
    int guess;
    int attempts = 0;

    cout << "猜一个 1~100 之间的数字" << endl;

    do {
        cout << "请输入你的猜测: ";
        cin >> guess;
        attempts++;

        if (guess > target) {
            cout << "太大了!" << endl;
        } else if (guess < target) {
            cout << "太小了!" << endl;
        } else {
            cout << "恭喜你,猜对了!" << endl;
            cout << "你用了 " << attempts << " 次机会" << endl;
            break;
        }

        if (attempts >= 7) {
            cout << "次数用完了,答案是: " << target << endl;
            break;
        }

    } while (true);

    return 0;
}

这个例子用了 do-while 循环(至少猜一次)、if/else 判断(大小比较)、break(猜对或次数用完时退出)。你看,流程控制和循环组合起来,就能写出有“交互感”的程序了。

八、总结

这一章的内容,说白了就是三件事:判断、循环、控制

  • 判断用 if/else 或 switch
  • 循环用 for、while、do-while
  • 控制用 break 和 continue

这些是 C++ 编程的“骨架”。没有它们,代码就是一盘散沙。有了它们,你才能写出真正有逻辑、能解决问题的程序。

嗯,这一章就到这儿。代码多敲几遍,自然就熟了。


公众号:蓝海资料掘金营,微信deep3321