【问题标题】:Continuous input to switch case until i press exit c#连续输入以切换大小写,直到我按退出 c#
【发布时间】:2013-06-20 20:21:23
【问题描述】:

我正在尝试创建一个程序,在我按下选项“6”之前,应用程序永远不会退出。下面是我的示例程序: 现在,如果我按下任何选项,它会执行相应的方法,并在执行完成后关闭控制台窗口(退出应用程序)。我希望控制台等待输入下一个选项。

Console.WriteLine(@"Select one of the following option:                                
                            1-Write Apps 
                            2-Write Drivers
                            3-Write OS
                            4-Write Packages
                            5-All the above
                            6-Exit");
           string strReadKey = Console.ReadKey().KeyChar.ToString();

           int.TryParse(strReadKey, out selectionKey);


           switch (selectionKey)
           {

               case 1:
                   DoApps(reqObj);
                   return;
               case 2:
                   DoDrivers(reqObj);
                   return;
               case 3:
                   DoOS(reqObj);
                   return;
               case 4:
                   DoPackages(reqObj);
                   return;
               case 5:
                   DoAll(reqObj);
                   return;
               case 6:
                   Environment.Exit(0);                       
                   return;
               default:
                   DoAll(reqObj);
                   return;
           }

【问题讨论】:

    标签: c# input switch-statement case continuous


    【解决方案1】:

    您可以将代码放入循环中,并将 return 更改为 break 语句:

    while(true) // Loop forever
    {
          string strReadKey = Console.ReadKey().KeyChar.ToString();
          int.TryParse(strReadKey, out selectionKey);
    
    
           switch (selectionKey)
           {
    
               case 1:
                   DoApps(reqObj);
                   break; // Break, don't return
               case 2:
                   DoDrivers(reqObj);
                   break;
               case 3:
                   DoOS(reqObj);
                   break;
               case 4:
                   DoPackages(reqObj);
                   break;
               case 5:
                   DoAll(reqObj);
                   break;
               case 6:
                   Environment.Exit(0);                       
                   break;
               default:
                   DoAll(reqObj);
                   break;
           }
    }
    

    如果您希望每次迭代都提示输入,您也可以将提示移到循环中。

    【讨论】:

      【解决方案2】:
      using System;
      
      namespace LoopUntilSelectionTester
      {
          class Program
          {
              static void Main()
              {            
                  string key;
                  while((key = Console.ReadKey().KeyChar.ToString()) != "6")            
                  {
                      int keyValue;                
                      int.TryParse(key, out keyValue);
      
                      ProcessInput(keyValue);
                  }    
              }
      
              private static void ProcessInput(int keyValue)
              {
                  switch (keyValue)
                  {
                      case 1:
                          DoApps(reqObj);
                          break;
                      case 2:
                          DoDrivers(reqObj);
                          break;
                      case 3:
                          DoOS(reqObj);
                          break;
                      case 4:
                          DoPackages(reqObj);
                          break;
                      case 5:
                          DoAll(reqObj);
                          break;
                  }
              }
          }
      }
      

      【讨论】:

        【解决方案3】:

        首先,我要做的是把它变成一个方法:

        public void AskForInput()
        {
        Console.WriteLine(@"Select one of the following options:                                
                                1-Write Apps 
                                2-Write Drivers
                                3-Write OS
                                4-Write Packages
                                5-All the above
                                6-Exit");
               string strReadKey = Console.ReadKey().KeyChar.ToString();
               int.TryParse(strReadKey, out selectionKey);
               switch (selectionKey)
               {
                   case 1:
                       DoApps(reqObj);
                       return;
                   case 2:
                       DoDrivers(reqObj);
                       return;
                   case 3:
                       DoOS(reqObj);
                       return;
                   case 4:
                       DoPackages(reqObj);
                       return;
                   case 5:
                       DoAll(reqObj);
                       return;
                   case 6:
                       Environment.Exit(0);                       
                       return;
                   default:
                       DoAll(reqObj);
                       return;
               }
        }
        

        然后像这样使用它:

        for (;;) AskForInput();
        

        【讨论】:

          【解决方案4】:

          只需将整个内容包装在一个 while 语句中即可。

          while (true)
          {
               Console.WriteLine(@"Select one of the following option:                                
                                      1-Write Apps 
                                      2-Write Drivers
                                      3-Write OS
                                      4-Write Packages
                                      5-All the above
                                      6-Exit");
                     string strReadKey = Console.ReadKey().KeyChar.ToString();
          
                     int.TryParse(strReadKey, out selectionKey);
          
          
                     switch (selectionKey)
                     {
          
                         case 1:
                             DoApps(reqObj);
                             break;
                         case 2:
                             DoDrivers(reqObj);
                             break;
                         case 3:
                             DoOS(reqObj);
                             break;
                         case 4:
                             DoPackages(reqObj);
                             break;
                         case 5:
                             DoAll(reqObj);
                             break;
                         case 6:
                             Environment.Exit(0);                       
                             break;
                         default:
                             DoAll(reqObj);
                             break;
                     }
          }
          

          【讨论】:

          • 和 Reed,我尝试给 while {true} { 案例 1:DoApps();break;等等...}'它会一直运行我的方法。我的下一个输入不会返回到控制台
          • @gogreen 有道理。看看你是如何不提示输入的?
          • @gogreen 尝试在那里复制我的代码。它每次通过 while 循环提示输入。里德和我想出了几乎完全相同的代码,只是我继续将输入例程卡在那里。
          【解决方案5】:

          这对我有用:

           Console.WriteLine(@"Select one of the following option:                                
                                      1-Write Applications XML
                                      2-Write Drivers XML
                                      3-Write Operating Systems XML
                                      4-Write Packages XML
                                      5-All the above
                                      6-Exit");
                     string strReadKey = Console.ReadKey().KeyChar.ToString();
          
                     int.TryParse(strReadKey, out selectionKey);
                     while (true)
                     {
          
                     switch (selectionKey)
                     {                       
                         case 1:
                             DoApplications(reqObj);
                             strReadKey = Console.ReadKey().KeyChar.ToString();
                             int.TryParse(strReadKey, out selectionKey);
                             break;
                         case 2:
                             DoDrivers(reqObj);
                             strReadKey = Console.ReadKey().KeyChar.ToString();
                             int.TryParse(strReadKey, out selectionKey);
                             break;
                         case 3:
                             DoOperatingSystems(reqObj);
                             strReadKey = Console.ReadKey().KeyChar.ToString();
                             int.TryParse(strReadKey, out selectionKey);
                             break;
                         case 4:
                             DoPackages(reqObj);
                             strReadKey = Console.ReadKey().KeyChar.ToString();
                             int.TryParse(strReadKey, out selectionKey);
                             break;
                         case 5:
                             DoAll(reqObj);
                             strReadKey = Console.ReadKey().KeyChar.ToString();
                             int.TryParse(strReadKey, out selectionKey);
                             break;
                         case 6:
                             Environment.Exit(0);
                             break;
                         default:
                             DoAll(reqObj);
                             strReadKey = Console.ReadKey().KeyChar.ToString();
                             int.TryParse(strReadKey, out selectionKey);
                             break;
                     }
                 }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-01-19
            • 1970-01-01
            • 2021-10-18
            • 2014-04-12
            • 2021-10-10
            • 2015-02-18
            相关资源
            最近更新 更多