while循环不会在错误条件下退出

Mis*_*kwu 2 .net c# while-loop

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();
}
Run Code Online (Sandbox Code Playgroud)

循环工作正常:

输出1:

输入名字:

约翰

输入姓:

彼得

输入名字:

插口

输入姓:

安德鲁

Output2 :(尝试在A点打破循环)

输入名字:

//循环没有退出但是转到了下一个语句

输入姓:

彼得

哎呀

当我尝试在A点打破循环时,循环不会退出,而是转到下一个语句然后在B点之后退出

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

Ham*_*jam 13

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

打破循环:

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
}
Run Code Online (Sandbox Code Playgroud)

设置条件以执行其余代码:

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
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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
}
Run Code Online (Sandbox Code Playgroud)

  • 他们只是嫉妒你睡觉时可以正确回答:) (4认同)
  • 我想说,虽然第一个例子提供了最快最容易理解的解决方案,但我建议不要打破循环.另外两个例子在长​​期维护和可读性方面更好,并且如果您决定在稍后的时间点延长循环,则不太可能导致规避错误. (2认同)