【问题标题】:While loop doesn't exit on false condition虽然循环不会在错误条件下退出
【发布时间】:2015-09-10 17:34:28
【问题描述】:
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();
}

循环运行良好:

输出1:

输入姓名:

约翰

输入姓氏:

彼得

输入姓名:

杰克

输入姓氏:

安德鲁

输出 2:(尝试在 A 点中断循环)

输入姓名:

一个//循环没有退出,而是进入下一条语句

输入姓氏:

彼得

哎呀

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

问题:为什么它不在点退出循环,我怎样才能让它在点A退出?

【问题讨论】:

    标签: c# .net while-loop


    【解决方案1】:

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

    跳出循环:

    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
    }
    

    【讨论】:

    • 他们只是嫉妒你在睡觉时能正确回答:)
    • 谢谢,您的第一个示例非常适合我的项目。
    • 我想说,虽然第一个示例提供了最快最易于理解的解决方案,但我建议不要打破循环。如果您决定在以后的某个时间点扩展循环,其他两个示例在长期维护和可读性方面更好,并且不太可能导致规避错误。
    • @MrPaulch 我也支持你!
    • 感谢您的意见,我们会考虑的。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:
      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;
          }
      }
      

      【讨论】:

        【解决方案4】:

        您可以更改循环块。

        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;
         }
        

        【讨论】:

          【解决方案5】:

          只有在每次执行整个循环体时才会检查循环条件。如果你想跳出循环,可以使用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();
          }
          

          【讨论】:

            【解决方案6】:

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

            您可以使用 if 语句检查名称是“A”还是“a”,然后在其计算结果为 true 时使用 break 命令使其在 A 点退出。

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

            【讨论】:

              猜你喜欢
              • 2015-08-07
              • 1970-01-01
              • 1970-01-01
              • 2012-10-22
              • 1970-01-01
              • 2019-06-28
              • 1970-01-01
              • 2015-09-14
              • 1970-01-01
              相关资源
              最近更新 更多