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循环的执行流程
执行步骤
- 执行循环体中的代码
- 检查条件表达式是否为true
- 如果为true,回到步骤1
- 如果为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#编程的基础,它将帮助你编写更加灵活和强大的程序。