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.");
}
}

