C# 当条件不为真时,While循环不循环#

C# 当条件不为真时,While循环不循环#,c#,C#,作为我任务的一部分,我正在编写一个C#console程序。我在这里试图做的是在用户每次输入无效内容时显示消息。但是,当我在做出正确选择后键入无效内容时,它只显示一次错误消息。在消息发出后,我做出了一个有效的选择,然后是一个无效的选择,它将退出控制台。我还希望它在用户输入有效数字时显示正确的消息,但在做出无效选择后不会连续出现这种情况。它只是退出控制台。。。我尝试使用“| |”而不是“&&”,这根本不起作用 我是一个绝对的编程初学者,所以如果我做错了什么,请帮助我 Console.WriteLin

作为我任务的一部分,我正在编写一个C#console程序。我在这里试图做的是在用户每次输入无效内容时显示消息。但是,当我在做出正确选择后键入无效内容时,它只显示一次错误消息。在消息发出后,我做出了一个有效的选择,然后是一个无效的选择,它将退出控制台。我还希望它在用户输入有效数字时显示正确的消息,但在做出无效选择后不会连续出现这种情况。它只是退出控制台。。。我尝试使用“| |”而不是“&&”,这根本不起作用

我是一个绝对的编程初学者,所以如果我做错了什么,请帮助我

Console.WriteLine("Enter 1, 2, 3, OR 4");
        uI = int.Parse(Console.ReadLine());

        while (uI != 1 && uI != 2 && uI != 3 && uI != 4)
        {
            Console.WriteLine("SELECT 1, 2, 3, OR 4");
            uI = int.Parse(Console.ReadLine());
        }
        if (uI == 1)
        {
            Console.WriteLine("msg");
            Console.WriteLine("SELECT 1, 2, 3, OR 4");
            uI = int.Parse(Console.ReadLine());
        }
        if (uI == 2)
        {
            Console.WriteLine("msgg");
            Console.WriteLine("SELECT 1, 2, 3, OR 4");
            uI = int.Parse(Console.ReadLine());
        }
        if (uI == 3)
        {
            Console.WriteLine("msggg");
            Console.WriteLine("SELECT 1, 2, 3, OR 4");
            uI = int.Parse(Console.ReadLine());
        }
        if (uI == 4)
        {
            Console.WriteLine("msgggg");
            Console.WriteLine("SELECT 1, 2, 3, OR 4");
            uI = int.Parse(Console.ReadLine());
        }

谢谢你

你需要一个不定式循环。此外,我会使用更具可读性的开关盒:

Console.WriteLine( "Enter 1, 2, 3, OR 4" );

while( true ) {
   uI = int.Parse( Console.ReadLine( ) );

   string message = "Error";
   switch( uI ) {
      case 1: message = "msg"; break;
      case 2: message = "msgg"; break;
      case 3: message = "msggg"; break;
      case 4: message = "msgggg"; break;
      default: break;
   }

   Console.WriteLine( message );      
   Console.WriteLine( "SELECT 1, 2, 3, OR 4" );
}
试试这个:

class Program
{
    static void Main(string[] args)
    {
        do
        {
            Console.WriteLine("SELECT 1, 2, 3, OR 4");
            var uI=int.Parse(Console.ReadLine());
            if (uI==1)
            {
                Console.WriteLine("msg");
            } else if (uI==2)
            {
                Console.WriteLine("msgg");
            }
            else if (uI==3)
            {
                Console.WriteLine("msggg");
            }
            else if (uI==4)
            {
                Console.WriteLine("msgggg");
            }
            else
            {
                break;
            }
        } while (true);
    }
}

因此,程序接受一个输入并对其进行操作,除非它不是1、2、3或4,否则它存在
中断的循环语句。

为什么您认为这会继续循环?你的外部控制回路在哪里?再想一想,重新探讨这个问题。您需要一个包含所有内容的循环来指示何时退出程序。@Brendan我认为这会继续循环,因为我的导师就是这样教我们的:您的代码不应该在多个位置具有相同的命令(
int.Parse()
)。这表示循环需要用于重复操作。@ja72 so uI=Console.ReadLine();如果可以的话?@Yasin没有。我想说的是,你的程序中不需要太多的
ReadLine()
语句。循环中只有一个就足够了。运算符工作正常,但并不总是循环回代码,因为当条件为false时,循环中还需要
if()
语句。我还将在
ReadLine()
之前放置一个
Writeline()
。不需要重复命令。@Fuex这比我的更简捷,我也能理解。感谢you@Fuex再次感谢你!:)这对我来说似乎有点进步,因为我也不得不发表评论来表达我的理解。我无法注释它使用与代码相同的命令(除了break)。假设你是一台计算机,一行一行地处理代码。你做什么?为什么?这就是你如何找到如何编程的方法。基本上,步骤是a)获取输入,b)处理输入,c)如果需要输入,对输入进行操作,d)否则退出。感谢您的解释,我将使用该方法尝试理解和注释:)处理输入是将输入作为值分配给变量,在这种情况下,它是从用户到uI的。只有一个问题,如果输入不符合预期,我需要显示一条错误消息,因此不是退出它,而是Console.WriteLine(“ERRORMSG”);谢谢,我只有在了解了我现在正在处理的开关和机箱之后才能使用它:)
        Console.WriteLine("Enter 1, 2, 3, OR 4");
        uI = int.Parse(Console.ReadLine());
        while(uI > 0) //exit loop if 0 is entered
        {
           switch(uI)
           {
              case 1: Console.WriteLine("msg"); break;
              case 2: Console.WriteLine("msgg"); break;
              case 3: Console.WriteLine("msggg"); break;
              case 4: Console.WriteLine("msgggg"); break;
              default: break; //do not write to console just loop again

           }
           Console.WriteLine("Enter 1, 2, 3, OR 4");
           uI = int.Parse(Console.ReadLine());
        }