C# - While 循环

C# while 循环 是一个基本的控制流语句,只要指定的条件成立,它就允许重复执行一段代码块。当迭代次数未预先确定时,这种循环结构非常有用。

while 循环的语法

以下是 C# while 循环的语法 -

while(condition) {
   statement(s);
}

此处,statement(s) 可以是单个语句,也可以是语句块。condition 可以是任意表达式,true 表示任意非零值。只要条件为真,循环就会迭代。

当条件变为假时,程序控制权将转移到循环之后的下一行。

while 循环流程图

C# 中的 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.");
    }
}