C 语言 while 和 do...while 循环

C 语言 whiledo...while 循环学习笔记


一、基本语法对比
循环类型语法结构执行特点
whilec<br>while (条件表达式) {<br> // 循环体<br>}先判断条件,后执行循环体(0~N次)
do...whilec<br>do {<br> // 循环体<br>} while (条件表达式);先执行循环体,后判断条件(1~N次)

二、执行流程图解
  1. while 循环流程

    开始 → 检查条件 → [true]→ 执行循环体 → 回到条件检查  
                 ↓ [false]  
                 结束
    
  2. do...while 循环流程

    开始 → 执行循环体 → 检查条件 → [true]→ 回到循环体  
                    ↓ [false]  
                    结束
    

三、核心应用场景
  1. while 典型用例

    • 不确定次数的循环
      int num;
      while (scanf("%d", &num) != EOF) { 
          // 持续读取输入直到文件结束
      }
      
    • 事件驱动型循环
      while (传感器数据未达标) {
          调整设备参数();
      }
      
  2. do...while 典型用例

    • 必须执行一次的输入验证
      char choice;
      do {
          printf("是否继续?(y/n): ");
          scanf(" %c", &choice);
      } while (choice != 'y' && choice != 'n');
      
    • 重试机制
      int retry_count = 0;
      do {
          if (发送数据() == SUCCESS) break;
          retry_count++;
      } while (retry_count < 3);
      

四、关键差异与注意事项
  1. 执行次数保证

    • while:可能完全不执行循环体
    • do...while:至少执行一次循环体
  2. 分号规则

    while (条件);  // ← 错误!会导致空循环
    do {...} while (条件);  // ← 必须带分号
    
  3. 循环变量控制

    int i = 3;
    while (i < 5) { 
        printf("%d ", i);  // 输出:3 4
        i++;  // 必须手动更新变量
    }
    
    int j = 10;
    do {
        printf("%d ", j);  // 输出:10
    } while (j < 5);      // 尽管条件不成立仍执行一次
    
  4. 避免死循环

    while (1) { ... }        // 经典无限循环
    do { ... } while (1);    // 等效写法
    // 需配合 break 退出
    
  5. 浮点数比较风险

    double val = 0.0;
    while (val != 1.0) {  // 可能因精度问题无法终止
        val += 0.1;
    }
    

五、性能与调试建议
  1. 优化技巧

    • 将复杂条件计算移到循环外:
      int max = calculate_max_value();  // 替代 while (i < calculate_max_value())
      while (i < max) { ... }
      
  2. 调试方法

    • 添加状态打印:
      int count = 0;
      while (condition) {
          printf("[DEBUG] 第%d次循环,变量值=%d\n", ++count, var);
          // ...
      }
      
    • 使用调试器观察条件表达式变化

六、对比总结表
特征whiledo...while
执行顺序先判断后执行先执行后判断
最小执行次数01
适用场景需要前置条件校验的场景必须执行一次的场景
代码可读性条件优先时更直观强调首次必须执行时更清晰
使用频率较高较低

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值