C# - While 循环
C# while 循环 是一种基本的控制流语句,它允许在指定条件为 true 时重复执行一段代码块。当迭代次数不确定时,这种循环结构非常有用。
while 循环的语法
以下是 C# while 循环的语法 −
while(condition) {
statement(s);
}
在这里,statement(s) 可以是单个语句或语句块。condition 可以是任意表达式,true 是任何非零值。只要条件为 true,循环就会迭代。
当条件变为 false 时,程序控制将传递到循环之后的下一行。
while 循环的流程图
在这里,while 循环的关键点是循环可能一次都不会执行。当条件被测试且结果为 false 时,循环体将被跳过,执行 while 循环之后的第一个语句。
while 循环的组成部分
while 循环有三个主要部分:
- 初始化:在计数器控制的循环中,当迭代次数已知时,此步骤在循环开始前定义计数器变量。
- 条件:只要此条件为
true,循环就会运行。 - 更新(递增/递减):条件内的计数器变量在每次迭代中都应发生变化,以防止无限循环。
语法
// 初始化
int i = 0;
// while 循环带条件
while (i < 5) {
Console.WriteLine(i);
// 更新(递增)
i++;
}
while 循环示例
在以下示例中,我们使用 while 循环显示从 10 到 20 的数字 −
using System;
namespace Loops {
class Program {
static void Main(string[] args) {
/* local variable definition */
int a = 10;
/* while loop execution */
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; // 移除最后一位数字
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.");
}