跳转到内容

C 语言 while 循环

来自代码酷

C语言While循环[编辑 | 编辑源代码]

While循环是C语言中最基础且强大的控制流结构之一,用于在满足特定条件时重复执行一段代码块。它属于“前测试循环”(即先检查条件再执行循环体),适用于不确定循环次数但明确终止条件的场景。

语法结构[编辑 | 编辑源代码]

While循环的基本语法如下:

while (condition) {
    // 循环体:条件为真时重复执行的代码
}
  • condition:布尔表达式,若结果为非零(真),则执行循环体;否则退出循环。
  • 循环体:可包含任意C语句,通常包含修改条件变量的操作以避免无限循环。

执行流程[编辑 | 编辑源代码]

flowchart TD A[开始] --> B{条件为真?} B -- 是 --> C[执行循环体] C --> B B -- 否 --> D[退出循环]

基础示例[编辑 | 编辑源代码]

示例1:计数循环[编辑 | 编辑源代码]

以下代码演示打印数字1到5:

#include <stdio.h>

int main() {
    int i = 1;
    while (i <= 5) {
        printf("%d\n", i);
        i++;  // 修改条件变量
    }
    return 0;
}

输出:

1
2
3
4
5

示例2:用户输入验证[编辑 | 编辑源代码]

While循环常用于输入验证:

#include <stdio.h>

int main() {
    int number;
    printf("输入一个正数:");
    scanf("%d", &number);

    while (number <= 0) {
        printf("无效输入!请重新输入:");
        scanf("%d", &number);
    }
    printf("你输入的是:%d\n", number);
    return 0;
}

交互示例:

输入一个正数:-3
无效输入!请重新输入:0
无效输入!请重新输入:5
你输入的是:5

高级应用[编辑 | 编辑源代码]

嵌套While循环[编辑 | 编辑源代码]

While循环可嵌套以实现复杂逻辑。例如打印乘法表:

#include <stdio.h>

int main() {
    int i = 1;
    while (i <= 3) {
        int j = 1;
        while (j <= 3) {
            printf("%d x %d = %d\t", i, j, i*j);
            j++;
        }
        printf("\n");
        i++;
    }
    return 0;
}

输出:

1 x 1 = 1    1 x 2 = 2    1 x 3 = 3    
2 x 1 = 2    2 x 2 = 4    2 x 3 = 6    
3 x 1 = 3    3 x 2 = 6    3 x 3 = 9    

无限循环与中断[编辑 | 编辑源代码]

通过breakcontinue控制流程:

#include <stdio.h>

int main() {
    while (1) {  // 无限循环
        int num;
        printf("输入数字(0退出):");
        scanf("%d", &num);
        if (num == 0) break;      // 退出循环
        if (num % 2 == 0) continue;// 跳过偶数
        printf("处理奇数:%d\n", num);
    }
    return 0;
}

数学建模[编辑 | 编辑源代码]

While循环可表达为: while P(c) do Sif P(c) then (S;while P(c) do S) 其中:

  • P(c)为条件表达式
  • S为循环体语句

常见错误[编辑 | 编辑源代码]

  • 忘记更新条件变量:导致无限循环
  while (x < 10) {
      printf("%d", x);  // x未改变,循环永不终止
  }
  • 误用分号:使循环体为空
  while (x < 10);  // 注意结尾分号!
  {
      printf("%d", x++);
  }

性能考量[编辑 | 编辑源代码]

  • While循环的效率与等效的for循环相同
  • 在编译器优化下,简单循环可能被展开(loop unrolling)
  • 避免在条件中调用复杂函数,例如:
  while (compute_intensive_function()) { ... }  // 不推荐

实际应用案例[编辑 | 编辑源代码]

案例:读取文件直到末尾[编辑 | 编辑源代码]

#include <stdio.h>

int main() {
    FILE *file = fopen("data.txt", "r");
    if (file == NULL) return 1;

    char buffer[256];
    while (fgets(buffer, sizeof(buffer), file) != NULL) {
        printf("%s", buffer);
    }
    fclose(file);
    return 0;
}

案例:游戏主循环[编辑 | 编辑源代码]

int game_running = 1;
while (game_running) {
    process_input();
    update_game_state();
    render_graphics();
    if (player_quit) game_running = 0;
}

总结[编辑 | 编辑源代码]

While循环是C语言中实现条件重复的核心工具,特点是:

  • 适合未知迭代次数的场景
  • 必须显式管理循环变量
  • 可通过break/continue精细控制
  • do-while形成互补(后者保证至少执行一次)

掌握While循环是理解更复杂控制结构(如嵌套循环、状态机)的基础。