跳转至

while 循环

基本语法

while (条件表达式) {
    // 循环体
}

先判断条件,再执行循环体。

条件成立,就执行一轮,再回来判断;不成立,就结束循环。

int i = 1;
while (i <= 3) {
    cout << i << ' ';
    i++;
}

输出 1 2 3。条件一开始就不成立,循环体一次也不执行。

for 和 while,都可以用来循环。

次数明确,常用 for;根据条件决定什么时候停,常用 while。不是必须这样选,看哪种写法更清楚。

循环 n 次

先看直接的写法,这里 n 是非负整数。

int n;
cin >> n;

while (n > 0) {
    // 重复做的事
    n--;
}

也经常看到这种简写:

while (n--) {
    // 重复做的事
}

n-- 先用原来的值判断,再把 n 减 1。非 0 成立,0 不成立。

比如 n = 3,循环体执行 3 次。最后用 0 判断时,虽然不再进入循环,但 n 仍会减 1,变成 -1。

正常执行到条件不成立时,第一种写法的 n 是 0,第二种是 -1。

后面还要用原来的次数,就先另存一份。

常见错误

循环里,要让条件有机会改变

前面的计数循环,漏掉 i++ 或 n--,就可能变成死循环。

while 后面,不要随手加分号

while (i <= 3); // 错误:循环体变成空语句
{
    i++; // 这里不受循环控制
}

大括号放在同一行,也一样是错的:

while (i <= 3); { // 错误:循环体变成空语句
    i++; // 这里不受循环控制
}

如果 i <= 3 一直成立,程序就会卡在空循环里,走不到后面的 i++。