C# - While 循环
C# while 循环 是一个基本的控制流语句,只要指定的条件成立,它就允许重复执行一段代码块。当迭代次数未预先确定时,这种循环结构非常有用。
while 循环的语法
以下是 C# while 循环的语法 -
while(condition) { statement(s); }
此处,statement(s) 可以是单个语句,也可以是语句块。condition 可以是任意表达式,true 表示任意非零值。只要条件为真,循环就会迭代。
当条件变为假时,程序控制权将转移到循环之后的下一行。
while 循环流程图

此处,while 循环的关键点在于循环可能永远不会运行。当条件测试结果为假时,循环体将被跳过,并执行 while 循环后的第一个语句。
while 循环的组成部分
while
循环主要包含三个部分:
- 初始化:在计数器控制的循环中,迭代次数已知,此步骤在循环开始前定义计数器变量。
- 条件:只要条件为
真
,循环就会运行。 - 更新(递增/递减):条件中的计数器变量应在每次迭代中发生变化,以防止无限循环。
语法
// 初始化 int i = 0; // 带条件的 while 循环 while (i < 5) { Console.WriteLine(i); // Update (Increment) i++; }
while 循环示例
在下面的示例中,我们使用 while 循环显示从 10 到 20 的数字 -
using System; namespace Loops { class Program { static void Main(string[] args) { /* 局部变量定义 */ int a = 10; /* while 循环执行 */ while (a <= 20) { Console.WriteLine("value of a: {0}", a); a++; } Console.ReadLine(); } } }
当编译并执行上述代码时,它会产生以下结果 -
value of a: 10 value of a: 11 value of a: 12 value of a: 13 value of a: 14 value of a: 15 value of a: 16 value of a: 17 value of a: 18 value of a: 19 value of a: 20
更多 while 循环示例
1. 计算前 n 个自然数的和
我们来看另一个 while 循环示例。这里,我们计算前 n 个自然数的和 -
using System; class Example { static void Main(string[] args) { int n = 5, sum = 0, i = 1; while (i <= n) { sum += i; i++; } Console.WriteLine("Sum of first " + n + " numbers is: " + sum); } }
以下是上述代码的输出 -
Sum of first 5 numbers is: 15
2. 反转数字
在此示例中,我们使用 while 循环来反转给定的数字:
using System; class Example { static void Main(string[] args) { int num = 12345, reverse = 0; while (num != 0) { int digit = num % 10; // 提取最后一位数字 reverse = reverse * 10 + digit; num /= 10; // 删除最后一位数字 } Console.WriteLine("Reversed Number: " + reverse); } }
以下是上述代码的输出 -
Reversed Number: 54321
3. 计算数字的位数
在本例中,我们使用 while 循环来计算整数的位数:
using System; class Example { static void Main(string[] args) { int num = 987654, count = 0; while (num != 0) { num /= 10; // Remove last digit count++; } Console.WriteLine("Total Digits: " + count); } }
以下是上述代码的输出 -
Total Digits: 6
while 循环的用例
以下是一些常见用例:
1. 读取用户输入,直到满足条件
while 循环可用于持续接受用户输入,直到他们输入特定值。
using System; class Example { static void Main() { string input; while (true) { Console.Write("Enter a word (type 'exit' to stop): "); input = Console.ReadLine(); if (input == "exit") break; Console.WriteLine("You entered: " + input); } } }
2. 循环直至输入有效信息
while 循环确保用户输入正确后再继续执行。
using System; class Example { static void Main() { int number; Console.Write("Enter a positive number: "); while (!int.TryParse(Console.ReadLine(), out number) || number <= 0) { Console.Write("Invalid input! Please enter a positive number: "); } Console.WriteLine("You entered: " + number); } }
3. 处理文件直至到达末尾
while 循环适用于逐行读取文件,直至没有更多可用数据。
using System; using System.IO; class Example { static void Main() { string filePath = "sample.txt"; if (File.Exists(filePath)) { using (StreamReader reader = new StreamReader(filePath)) { string line; while ((line = reader.ReadLine()) != null) { Console.WriteLine(line); } } } } }
4. 生成随机数直至满足条件
此 while 循环在动态检查条件的游戏或模拟中非常有用。
using System; class Example { static void Main() { Random rand = new Random(); int number; do { number = rand.Next(1, 10); Console.WriteLine("Generated: " + number); } while (number != 7); Console.WriteLine("Stopped at 7!"); } }
5. 运行后台任务直至满足停止条件
while 循环可用于持续检查系统状态或等待标志位发生变化。
using System; using System.Threading; class Example { static void Main() { bool isRunning = true; int counter = 0; while (isRunning) { Console.WriteLine("Running... " + counter); Thread.Sleep(1000); // 模拟延迟 counter++; if (counter == 5) isRunning = false; } Console.WriteLine("Process stopped."); } }