while在C语言中如何使用?

99ANYc3cd6
预计阅读时长 12 分钟
位置: 首页 C语言 正文

一句话概括

while 是 C 语言中最基本的循环语句之一,它的作用是:在某个条件为真时,重复执行一段代码,直到条件变为假为止。


核心概念:循环的三个要素

理解 while 循环,最好从它所遵循的“循环三要素”入手:

  1. 循环初始化:在循环开始前,设置一个初始状态(通常是给一个计数器变量赋值)。
  2. 循环条件:在每次循环开始前,检查一个条件,如果条件为真,则执行循环体内的代码;如果为假,则循环结束。
  3. 循环迭代:在每次循环体执行完毕后,更新状态(通常是增加或减少计数器的值),以便在下一次检查条件时,能向最终结束的方向迈进。

while 循环的特点是:先判断条件,后执行代码,这意味着,如果一开始条件就不成立,那么循环体内的代码一次都不会被执行。


语法结构

while 循环的语法非常简单:

while (条件表达式) {
    // 循环体
    // 当条件表达式为真时,这里面的代码会被反复执行
}
  • while:是 C 语言的关键字,表示这是一个 while 循环。
  • 条件表达式:这是一个任何可以返回“真”(非零)或“假”(0)的表达式,通常是一个关系表达式(如 i < 10)。
  • 花括号用于包裹循环体,如果循环体只有一条语句,可以省略花括号,但强烈建议总是使用花括号,以增加代码的可读性和避免错误。

执行流程

while 循环的执行流程可以分解为以下步骤:

  1. 计算:程序首先计算 条件表达式 的值。
  2. 判断
    • 如果值为(非零),则执行步骤 3。
    • 如果值为(0),则循环结束,程序继续执行 while 循环后面的代码。
  3. 执行:执行一遍 中的所有循环体代码。
  4. 返回:执行完循环体后,程序不返回条件表达式,而是直接跳回步骤 1,再次计算条件表达式,开始新一轮的循环。
  5. 重复:这个过程会不断重复,直到某次计算条件表达式时,其结果为假为止。

代码示例

示例1:经典的计数循环

这个例子会打印从 0 到 4 的数字。

#include <stdio.h>
int main() {
    int i = 0; // 1. 循环初始化
    // 只要 i 小于 5,循环就会继续
    while (i < 5) { // 2. 循环条件
        printf("i 的值是: %d\n", i);
        i++; // 3. 循环迭代 (i 的值增加 1)
    }
    printf("循环结束!\n");
    return 0;
}

执行过程:

  1. i 初始化为 0
  2. 检查 i < 5 (0 < 5),结果为
    • 打印 "i 的值是: 0"
    • i 自增为 1
  3. 再次检查 i < 5 (1 < 5),结果为
    • 打印 "i 的值是: 1"
    • i 自增为 2
  4. ... (这个过程重复)
  5. i 的值为 4 时:
    • 检查 i < 5 (4 < 5),结果为
    • 打印 "i 的值是: 4"
    • i 自增为 5
  6. 再次检查 i < 5 (5 < 5),结果为
  7. 循环结束,程序执行 printf("循环结束!");

输出:

i 的值是: 0
i 的值是: 1
i 的值是: 2
i 的值是: 3
i 的值是: 4
循环结束!

示例2:循环体一次都不执行

这个例子展示了 while 循环“先判断,后执行”的特性。

#include <stdio.h>
int main() {
    int j = 10; // 初始化 j 为 10
    // 检查 j 是否小于 5
    while (j < 5) {
        printf("这个消息永远不会被打印!\n");
        j++;
    }
    printf("因为 j 初始值就是 10,不满足 j < 5 的条件,\n");
    return 0;
}

输出:

因为 j 初始值就是 10,不满足 j < 5 的条件。

whilefor 循环的区别

while 循环和 for 循环都可以实现循环,但它们的侧重点不同:

  • while 循环:当你不知道循环需要执行多少次,但知道循环应该在什么条件下结束时,使用 while 更合适,读取文件直到文件末尾,或者等待用户输入某个特定的命令。

    // 例子:读取用户输入,直到输入 "quit"
    char input[100];
    while (strcmp(input, "quit") != 0) {
        printf("请输入命令 (输入 'quit' 退出): ");
        scanf("%s", input);
    }
  • for 循环:当你明确知道循环的初始化、条件和迭代这三个要素时,使用 for 循环更清晰、更紧凑,它把循环的控制语句都放在一行里。

    // 例子:明确知道要循环 10 次
    for (int i = 0; i < 10; i++) {
        printf("循环第 %d 次\n", i);
    }

你可以把 for 循环看作是 while 循环的一种语法糖,上面的 for 循环完全等价于下面的 while 循环:

int i = 0; // 初始化
while (i < 10) { // 条件
    printf("循环第 %d 次\n", i);
    i++; // 迭代
}

重要注意事项

  1. 死循环while 循环的条件永远为真,循环将永远不会结束,这被称为“死循环”,这通常是由于忘记在循环体内更新导致条件变化的变量造成的。

    // 这是一个死循环!
    int k = 0;
    while (k < 10) {
        printf("k = %d\n", k);
        // 忘记写 k++ 了!
    }
  2. 分号陷阱:这是一个非常常见的错误。

    // 错误示例
    int i = 0;
    while (i < 5); // 这里的分号 ; 创建了一个空循环体
    {
        printf("i = %d\n", i);
        i++;
    }

    这段代码中,while (i < 5); 后面的分号表示循环体是空语句()。 中的代码块实际上不再是循环的一部分,它只会在 while 循环结束后被执行一次,这里会陷入死循环,然后一次性打印出 i 的最终值(i 没有被定义,可能会报错)。

特性 描述
名称 while 循环
类型 前置条件循环
执行顺序 先判断条件,后执行代码
适用场景 当循环次数不确定,但结束条件明确时
核心要素 初始化、条件、迭代(需要手动管理)
优点 结构简单,逻辑清晰,适用于各种场景
缺点 容易忘记写循环迭代部分,导致死循环
-- 展开阅读全文 --
头像
int如何安全转char?
« 上一篇 今天
如何实现DEDE会员登录后才能查看内容?
下一篇 » 今天

相关文章

取消
微信二维码
支付宝二维码

目录[+]