do-while循环语句

do-while循环是C#中的后测试循环结构,即先执行循环体,再检查条件。本教程将详细介绍do-while循环的语法、使用方法和与while循环的区别。

1. 概述

do-while循环是一种后测试循环结构,即先执行一次循环体,然后再检查条件。即使条件为false,循环体也会至少执行一次。do-while循环适用于需要至少执行一次操作的情况。

2. 基本语法

do-while循环的基本语法如下:

do
{
    // 循环体:至少执行一次的代码
} while (条件表达式);

其中:

  • do:关键字,表示循环的开始
  • 循环体:至少执行一次的代码块
  • while:关键字,表示循环条件的检查
  • 条件表达式:必须是一个布尔表达式,每次循环结束后都会检查

3. 基本用法示例

示例:输出1到10的数字

int i = 1;

do
{
    Console.WriteLine(i);
    i++;
} while (i <= 10);

输出结果:

1
2
3
4
5
6
7
8
9
10

4. do-while循环的执行流程

执行步骤

  1. 执行循环体中的代码
  2. 检查条件表达式是否为true
  3. 如果为true,回到步骤1
  4. 如果为false,跳出循环,继续执行后面的代码

5. 与while循环的区别

do-while循环与while循环的主要区别在于循环体执行的时机:

特性 while循环 do-while循环
测试时机 前测试(先检查条件) 后测试(先执行循环体)
最小执行次数 0次 1次
适用场景 可能一次都不执行 至少执行一次

6. 常见应用场景

场景1:菜单选择程序

int choice;
string input;

do
{
    Console.WriteLine("=== 菜单 ===");
    Console.WriteLine("1. 新建文件");
    Console.WriteLine("2. 打开文件");
    Console.WriteLine("3. 保存文件");
    Console.WriteLine("4. 退出");
    Console.Write("请选择:");
    
    input = Console.ReadLine();
} while (input != "4" && !int.TryParse(input, out choice));

Console.WriteLine("程序已退出");

场景2:用户输入验证

int number;

do
{
    Console.Write("请输入一个正整数:");
} while (!int.TryParse(Console.ReadLine(), out number) || number <= 0);

Console.WriteLine($"您输入的数字是:{number}");

场景3:游戏主循环

bool gameOver = false;
int score = 0;

do
{
    Console.WriteLine($"当前分数:{score}");
    Console.WriteLine("游戏进行中...");
    
    // 模拟游戏逻辑
    Console.WriteLine("1. 继续游戏");
    Console.WriteLine("2. 结束游戏");
    Console.Write("请选择:");
    
    string input = Console.ReadLine();
    if (input == "2")
    {
        gameOver = true;
    }
    else
    {
        score += 10;
    }
} while (!gameOver);

Console.WriteLine($"游戏结束!最终分数:{score}");

7. 注意事项

重要注意事项

  • 循环体至少执行一次:这是do-while循环的特点
  • 确保循环条件最终会变为false:否则会导致无限循环
  • 在循环体内更新循环变量:确保每次循环都有进展
  • 注意while后面的分号:do-while循环的while后面必须有分号
  • 考虑使用break语句:在满足特定条件时提前退出循环

8. break和continue语句

在do-while循环中,可以使用break和continue语句来控制循环流程。

示例:使用break和continue

int i = 1;
int sum = 0;

do
{
    if (i == 5)
    {
        i++;
        continue; // 跳过本次循环
    }
    
    if (i > 10)
    {
        break; // 退出整个循环
    }
    
    sum += i;
    i++;
} while (true);

Console.WriteLine($"1到10的和是:{sum}");

9. 嵌套do-while循环

do-while循环可以嵌套使用,形成多层循环结构。

示例:简单的输入验证嵌套

int rows;
int columns;

do
{
    Console.Write("请输入行数(1-10):");
} while (!int.TryParse(Console.ReadLine(), out rows) || rows < 1 || rows > 10);

do
{
    Console.Write("请输入列数(1-10):");
} while (!int.TryParse(Console.ReadLine(), out columns) || columns < 1 || columns > 10);

Console.WriteLine($"您选择了一个{rows}行{columns}列的网格");

10. 常见错误与解决方案

错误1:忘记while后面的分号

// 错误示例
int i = 1;
do
{
    Console.WriteLine(i);
    i++;
} while (i <= 10) // 忘记了分号
// 正确示例
int i = 1;
do
{
    Console.WriteLine(i);
    i++;
} while (i <= 10); // 添加分号

错误2:循环条件错误

// 错误示例
int i = 1;
do
{
    Console.WriteLine(i);
    i++;
} while (i < 10) // 应该是 <= 10
// 正确示例
int i = 1;
do
{
    Console.WriteLine(i);
    i++;
} while (i <= 10);

错误3:忘记更新循环变量

// 错误示例
int i = 1;
do
{
    Console.WriteLine(i);
    // 忘记了 i++;
} while (i <= 10);
// 正确示例
int i = 1;
do
{
    Console.WriteLine(i);
    i++; // 更新循环变量
} while (i <= 10);

11. 完整示例程序

示例:简单的计算器程序

using System;

class Program
{
    static void Main(string[] args)
    {
        bool continueCalculating = true;

        Console.WriteLine("=== 简单计算器 ===");

        do
        {
            Console.WriteLine("\n请选择操作:");
            Console.WriteLine("1. 加法");
            Console.WriteLine("2. 减法");
            Console.WriteLine("3. 乘法");
            Console.WriteLine("4. 除法");
            Console.WriteLine("5. 退出");

            Console.Write("请输入选择(1-5):");
            string input = Console.ReadLine();

            if (input == "5")
            {
                continueCalculating = false;
                continue;
            }

            if (int.TryParse(input, out int choice) && choice >= 1 && choice <= 4)
            {
                Console.Write("请输入第一个数字:");
                if (double.TryParse(Console.ReadLine(), out double num1))
                {
                    Console.Write("请输入第二个数字:");
                    if (double.TryParse(Console.ReadLine(), out double num2))
                    {
                        double result = 0;
                        string operation = "";

                        switch (choice)
                        {
                            case 1:
                                result = num1 + num2;
                                operation = "+";
                                break;
                            case 2:
                                result = num1 - num2;
                                operation = "-";
                                break;
                            case 3:
                                result = num1 * num2;
                                operation = "×";
                                break;
                            case 4:
                                if (num2 != 0)
                                {
                                    result = num1 / num2;
                                    operation = "÷";
                                }
                                else
                                {
                                    Console.WriteLine("错误:除数不能为零!");
                                    continue;
                                }
                                break;
                        }

                        Console.WriteLine($"结果:{num1} {operation} {num2} = {result}");
                    }
                    else
                    {
                        Console.WriteLine("无效的数字!");
                    }
                }
                else
                {
                    Console.WriteLine("无效的数字!");
                }
            }
            else
            {
                Console.WriteLine("无效的选择!");
            }

        } while (continueCalculating);

        Console.WriteLine("\n计算器已退出,按任意键结束...");
        Console.ReadKey();
    }
}

12. 总结

do-while循环是C#中重要的循环结构之一,它具有以下特点:

  • 后测试循环:先执行循环体,再检查条件
  • 至少执行一次:循环体保证至少执行一次
  • 适用场景:需要至少执行一次操作的情况
  • 注意事项:while后面必须有分号

通过本教程的学习,你应该掌握了:

  • do-while循环的基本语法和使用方法
  • do-while循环的执行流程
  • do-while循环与while循环的区别
  • break和continue语句的使用
  • 嵌套do-while循环的使用
  • 常见错误与解决方案

熟练掌握do-while循环是学习C#编程的基础,它将帮助你编写更加灵活和强大的程序。