【转】go实现while和do……while循环

 

//输出10次hello,world(使用类似while循环形式,先判断后做)
func jobWhileMoni() {
    var count = 0
    for {
        if count >= 10 {
            break //如果count>=10则退出
        }
        fmt.Println("hello,world", count)
        count++
    }
}
//模拟do……while实现输出10次hello,world(先做后判断)
func jobDowhileMoni(){
    var i = 0
    for{
        fmt.Println("hello,world",i)
        i++
        if(i>=10){
            break
        }
    }
}

转自: https://www.jianshu.com/p/2ac52fe2810e

<think>嗯,用户现在想了解for、do...whilewhile循环之间的区别。我需要先回顾一下这三种循环的基本结构使用场景。用户之前已经问过关于do循环的问题,所以我需要确保这次的回答不仅覆盖所有三种循环,还要突出它们的区别,可能还要参考之前提供的引用内容,但看起来用户这次的问题之前的引用关系不大,不过还是要注意是否有相关点可以联系。 首先,我应该从每种循环的语法开始。for循环通常用于已知循环次数的情况,比如遍历数组或执行固定次数的操作。while循环则在条件满足时重复执行,可能一次都不执行。而do...while循环至少执行一次,之后再检查条件。这是关键的区别之一,之前回答do循环时也提到过,所以需要再次强调。 然后,使用场景的不同。比如输入验证适合用do...while,因为至少需要执行一次来获取输入。而for循环适合处理有明确迭代变量的情况,比如遍历数组。while循环适合不确定次数但需要条件检查的情况,比如读取文件直到结束。 接下来,考虑用户可能的实际应用。他们可能是在学习编程,需要明确何时使用哪种循环结构。因此,给出具体的例子会有帮助,比如用for循环计算阶乘,用while循环处理用户输入,用do...while进行输入验证,这样可以直观展示区别。 还需要注意性能方面吗?比如在循环结构的选择上是否影响效率,但通常这三种循环在性能上没有显著差异,更多是适用场景的问题。不过如果有特殊情况,比如循环内的条件判断位置,可能会影响流程,需要指出。 另外,用户之前的回答中引用了线程、动态规划并发并行等内容,但这次的问题是关于循环结构的,可能没有直接关联。不过如果有机会的话,可以稍微提及多线程中循环的使用,但可能没必要,容易偏离主题。还是专注于循环本身的区别更好。 还要检查是否有常见的误区,比如do...while的条件在循环体之后,而whilefor的条件在循环体之前。这可能导致逻辑错误,比如在条件不满足时,do...while依然执行一次。需要提醒用户注意这一点。 最后,确保回答结构清晰,分点列出每个循环的特点、语法、使用场景示例,帮助用户逐步理解。同时,生成的相关问题要引导用户深入思考,比如优化循环、选择不同循环的依据以及调试循环问题的方法。</think>### `for`、`do...while` `while` 循环的区别 这三种循环是编程中常见的控制流结构,虽然都能实现重复执行代码的功能,但它们的语法、使用场景执行逻辑存在显著差异。以下是详细对比: --- #### 1. **语法与执行逻辑** | 循环类型 | 语法(以 C 语言为例) | 执行顺序 | |----------------|-------------------------------------------|--------------------------------------------------------------------------| | **`for`** | `for(初始化; 条件; 增量) { ... }` | 先初始化 → 检查条件 → 若为真,执行代码块 → 执行增量 → 重复检查条件[^1]。 | | **`while`** | `while(条件) { ... }` | 先检查条件 → 若为真,执行代码块 → 重复检查条件[^2]。 | | **`do...while`**| `do { ... } while(条件);` | 先执行代码块 → 检查条件 → 若为真,重复执行代码块[^3]。 | **关键区别**: - `for` `while` **可能一次都不执行**(若初始条件为假)。 - `do...while` **至少执行一次**(无论条件是否满足)。 --- #### 2. **适用场景** | 循环类型 | 典型场景 | |----------------|--------------------------------------------------------------------------------------------| | **`for`** | **已知迭代次数**(如遍历数组、重复固定次数的操作): ```c for(int i=0; i<10; i++) { printf("%d\n", i); } ``` | **`while`** | **条件驱动的不确定迭代次数**(如读取文件直到结束、等待用户输入有效值): ```c int num; scanf("%d", &num); while(num != 0) { // 处理num scanf("%d", &num); } ``` | **`do...while`** | **必须至少执行一次**(如输入验证、菜单选择): ```c char choice; do { printf("是否继续?(Y/N)"); scanf(" %c", &choice); } while(choice != 'Y' && choice != 'N'); ``` --- #### 3. **性能与灵活性** - **`for` 循环**: - 适合**集中管理循环变量**(初始化、条件、增量都在同一行)。 - 常用于需要明确**计数**或**范围遍历**的场景(如 `for(int i=0; i<n; i++)`)。 - **`while` 循环**: - 条件检查在循环开始前,适用于**无需预先初始化变量**或**条件复杂**的情况(如 `while(data != NULL)`)。 - **`do...while` 循环**: - 适合需要**先执行后验证**的逻辑(如游戏循环、输入验证)。 - 若循环体依赖初始条件的结果,需注意避免逻辑错误(例如变量未初始化)。 --- #### 4. **代码示例对比** **目标**:计算 1 到 5 的累加。 - **`for` 实现**: ```c int sum = 0; for(int i=1; i<=5; i++) { sum += i; } ``` - **`while` 实现**: ```c int sum = 0, i=1; while(i <=5) { sum += i; i++; } ``` - **`do...while` 实现**: ```c int sum = 0, i=1; do { sum += i; i++; } while(i <=5); ``` (结果均为 15,但若 `i` 初始值为 6,`do...while` 会错误地执行一次,导致 `sum=6`。) --- ### **总结** | 特性 | `for` | `while` | `do...while` | |----------------|------------------------|------------------------|------------------------| | **执行次数** | 0 或多次 | 0 或多次 | 至少 1 次 | | **条件检查** | 循环开始前 | 循环开始前 | 循环结束后 | | **适用场景** | 明确迭代次数 | 不确定次数,条件驱动 | 必须至少执行一次 | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值