while 循环不会在 false 条件下退出

While loop doesn't exit on false condition

static void Main(string[] args)
{
    string name = null, surname = null;
    while (name != "A" && surname != "A")
    {
        Console.WriteLine("Enter Name:");
        name = Console.ReadLine(); // Point A
        Console.WriteLine("Enter Surname:");
        surname = Console.ReadLine(); // Point B
    }
    Console.WriteLine("Oops");
    Console.ReadLine();
}

循环工作正常:

Output1:

Enter Name:

John

Enter Surname:

Peter

Enter Name:

Jack

Enter Surname:

Andrew

Output2: (Trying the break the loop at Point A)

Enter Name:

A //loop didn't exit but went to the next statement

Enter Surname:

Peter

Oops

当我试图在A点中断循环时,循环并没有退出,而是转到下一条语句,然后在B点之后退出

问题:为什么在点不退出循环,如何让它在点A退出?

将在进入整个代码块之前检查循环条件,而不是在代码中的每个语句执行之后。您可以添加一个条件来执行第二部分或跳出循环或强制检查循环条件。

跳出循环:

while (name != "A" && surname != "A")
{
    Console.WriteLine("Enter Name:");
    name = Console.ReadLine(); // Point A
    if (name == "A")
        break;
    Console.WriteLine("Enter Surname:");
    surname = Console.ReadLine(); // Point B
}

设置执行剩余代码的条件:

while (name != "A" && surname != "A")
{
    Console.WriteLine("Enter Name:");
    name = Console.ReadLine(); // Point A
    if (name != "A")
    {
        Console.WriteLine("Enter Surname:");
        surname = Console.ReadLine(); // Point B
    }
}

强制检查循环条件(continue后的代码不会执行):

while (name != "A" && surname != "A")
{
    Console.WriteLine("Enter Name:");
    name = Console.ReadLine(); // Point A
    if (name == "A")
        continue;
    Console.WriteLine("Enter Surname:");
    surname = Console.ReadLine(); // Point B
}
while (true)
{
    Console.WriteLine("Enter Name:");
    name = Console.ReadLine(); // Point A
    if (name=="A")
    {
        return;
    }
    Console.WriteLine("Enter Surname:");
    surname = Console.ReadLine(); // Point B
    if (surname=="A")
    {
        return;
    }
}

仅在处理完 while 循环中的所有代码时才检查条件。所以一切正常。

您可以更改循环块。

while (true)
{
    Console.WriteLine("Enter Name:");
    name = Console.ReadLine(); // Point A
    if(name =="A")
        break;
    Console.WriteLine("Enter Surname:");
    surname = Console.ReadLine(); // Point B
    if(surname == "A")
        break;
 }

只有在每次执行整个循环体时才会检查循环条件。如果你想跳出循环,你可以使用 break 语句

static void Main(string[] args)
{
    string name = null, surname = null;
    while (surname != "A")
    {
        Console.WriteLine("Enter Name:");
        name = Console.ReadLine(); // Point A
        if (name == "A")
        {
            break;
        }
        Console.WriteLine("Enter Surname:");
        surname = Console.ReadLine(); // Point B
    }
    Console.WriteLine("Oops");
    Console.ReadLine();
}

循环将在重新检查循环条件之前检查所有指令。

您可以通过使用 if 语句检查名称是否为 "A" 或 "a",然后在其计算结果为真时使用 break 命令,使其在 A 点退出。

if(name == "A" || name == "a") break;