2010-09-22 130 views
1

我是C#的新手。我在控制檯應用程序中有一個「菜單」。現在,當我完成從菜單中選取項目並執行該菜單項目所需的操作時,我想再次循環顯示菜單,以便用戶可以選擇不同的菜單項目。我在菜單上有一個退出,我只想使用它退出。我試過一段時間循環,但這不起作用。它在菜單項被選中並且所選項目代碼已經運行之後關閉應用程序。我究竟做錯了什麼?循環切換語句

static void Main() 
    { 
     int input = 0; 
     while (true) 
     { 

      Console.WriteLine("MENU"); 
      Console.WriteLine("Please enter the number that you want to do:"); 
      Console.WriteLine("1. Do thing A"); 
      Console.WriteLine("2. Do thing B"); 
      Console.WriteLine("3. Do thing C"); 
      Console.WriteLine("4. Do thing D"); 
      Console.WriteLine("5. Do thing E"); 
      Console.WriteLine("6. Do thing F"); 
      Console.WriteLine("7. Exit"); 

      int menuchoice = int.Parse(Console.ReadLine()); 

      switch (menuchoice) 
      { 
       case 1: 
        Console.WriteLine("Thing A has been done"); 
        break; 
       case 2: 
        Console.WriteLine("Thing B has been done"); 
        break; 
       case 3: 
        Console.WriteLine("Thing C has been done"); 
        break; 
       case 4: 
        Console.WriteLine("Thing D has been done"); 
        break; 
       case 5: 
        Console.WriteLine("Thing E has been done"); 
        break; 
       case 6: 
        Console.WriteLine("Thing F has been done"); 
        break; 
       case 7: 
        Environment.Exit; //edit 
        break; 
       default: 
        Console.WriteLine("Sorry, invalid selection"); 
        break; 
      } 

      input++; 
      if (input < 30) 
       continue; 
      else 
       break; 
     }   
    } 

任何人都可以請幫忙嗎?提前致謝!

編輯:我知道那個「Console.Exit」不起作用。我只是把它放在那裏,以便控制檯必須在那裏退出。我的問題是,在選擇選項並選擇了選項代碼後,我需要每次循環整個菜單。我只想使用退出退出。但此時菜單不會循環,控制檯在選擇了1個選項並且選項代碼已經運行後關閉。

編輯:當你開始你的程序,你按1然後回車會發生什麼?這是真正的問題,菜單似乎沒有循環。在我啓動我的程序後,按1然後返回代碼,情況1運行完美,但隨後控制檯關閉。如果我再次啓動控制檯,並且此時按2,則情況2中的代碼也可以完美運行,但控制檯再次關閉。我已經測試過我所有的情況,並且所有的情況都很完美。

+3

什麼問題? (用Environment.Exit()替換Console.Exit) – 2010-09-22 08:25:20

+0

關於你的編輯:對我來說你的示例循環和我所期望的一樣。當你開始你的程序('Environment.Exit'替換'Console.Exit')時會發生什麼情況,你按1然後按Return?我懷疑你發佈的示例與你正在運行的代碼有些不同(顯然是這樣,因爲上面的示例沒有編譯)。 – 2010-09-22 08:45:15

+0

我知道那個「Console.Exit」不起作用。我只是把它放在那裏,以便控制檯必須在那裏退出。我試過Environment.Exit(),但似乎也沒有工作。 – CSharpSuzie 2010-09-22 08:46:08

回答

5

保持簡單:循環停留在循環,直到7按下

int menuchoice = 0; 
     while (menuchoice != 7) 
     { 

      Console.WriteLine("MENU"); 
      Console.WriteLine("Please enter the number that you want to do:"); 
      Console.WriteLine("1. Do thing A"); 
      Console.WriteLine("2. Do thing B"); 
      Console.WriteLine("3. Do thing C"); 
      Console.WriteLine("4. Do thing D"); 
      Console.WriteLine("5. Do thing E"); 
      Console.WriteLine("6. Do thing F"); 
      Console.WriteLine("7. Exit"); 

      menuchoice = int.Parse(Console.ReadLine()); 

      switch (menuchoice) 
      { 
       case 1: 
        Console.WriteLine("Thing A has been done"); 
        break; 
       case 2: 
        Console.WriteLine("Thing B has been done"); 
        break; 
       case 3: 
        Console.WriteLine("Thing C has been done"); 
        break; 
       case 4: 
        Console.WriteLine("Thing D has been done"); 
        break; 
       case 5: 
        Console.WriteLine("Thing E has been done"); 
        break; 
       case 6: 
        Console.WriteLine("Thing F has been done"); 
        break; 
       case 7: 
        break; //edit 
       default: 
        Console.WriteLine("Sorry, invalid selection"); 
        break; 
      } 
+0

您的示例不能編譯。您將不得不替換'Console.Exit'(這是示例的實際問題)。 – 2010-09-22 08:33:57

+0

菜單不循環,控制檯在選擇了1個選項並且選項代碼已經運行後關閉。每個案例之後的突破陳述都不能解決問題嗎? – CSharpSuzie 2010-09-22 08:45:08

+0

@CSharpSuzie:不,break語句應該沒問題。 'break'總是留下最內層的循環或switch語句,如[這裏]所述(http://msdn.microsoft.com/en-us/library/adbctzc4%28VS.71%29.aspx) – 2010-09-22 08:49:26

4

更換Console.Exit;input = 30;或只使用return;

注意如果用戶輸入一個字符的行int menuchoice = int.Parse(Console.ReadLine());產生錯誤。您可以使用int.TryParse ...

0

非常簡單的方法是執行以下操作。使用輸入計數器作爲標誌來退出while循環。

case 7: 
    input =30; 
break; 
2

您的代碼示例無法編譯,因爲沒有Console.Exit

只需將Console.Exit; break;替換爲return;聲明,並且您的示例應該按預期工作。

0

這可以在我的機器上正常工作,但在您的邏輯規定的30個命令後停止。

Console.Exit在我的機器上給出了一個複合錯誤。我以前從未使用Console.Exit

難道你不能用input = 30;來代替它來打破你的循環?