2012-02-19 66 views
1

我無法離開While循環在我的代碼和方法。用戶可以選擇輸入1或2和0來取消(離開菜單和方法)。但是現在的代碼,我想在Switch中的默認選項阻止它離開While循環!?我能以另一種更好的方式做到嗎?讓While While?

 // Read user input 
    public void ReadUserInput() 
    { 
     Console.Write("Your choice? "); 
     int choice = -1; 
     while (choice != 0) 
     { 
      if (int.TryParse(Console.ReadLine(), out choice)) 
      { 
      switch (choice) 
      { 
       case 1:   
        ShowSchedule(1); 
        break; 

       case 2: 
        ShowSchedule(2); 
        break; 

       default: 
        ErrorMessage(); // Call method to show error message 
        ReadUserInput(); // Call method for new input 
        break;  
      } 
      } 
      else 
      { 
       // Call method to show error message 
       ErrorMessage(); 
       Start(); 
      } 
     } 
    } 
+0

只是'return'? – 2012-02-19 16:23:37

+0

你是否已經完成了代碼執行並通過循環觀察了變量的值? – XIVSolutions 2012-02-19 16:27:43

回答

3

只需添加一個

case 0: 
    break; 

退出循環,如果用戶輸入0。如果確實是有沒有代碼應在方法中的循環運行後,你也可以直接從它返回與

case 0: 
    return; 
+2

這不會破壞'switch'而不是'while'嗎? – 2012-02-19 16:24:44

+0

@moguzalp我認爲'同時'也'休息'不是退出循環的官方術語,條件評估爲假,但是,是的,這就是要點。 – 2012-02-19 16:29:25

+0

謝謝,但這是行不通的!現在,如果用戶輸入4或任何不需要的標誌(如A),我不會收到錯誤消息嗎? – 2012-02-19 16:31:40

0

您可以使用return關鍵字完全退出該函數。

+0

使用返回在哪裏? – 2012-02-19 16:36:40

+0

無論你想離開該方法,當然。我想這將是在休息之前的缺省部分(或者可能不是它)。 – Gigi 2012-02-19 16:45:59

1

只需將初始Console.Write()放入循環中,請勿遞歸調用ReadUserInput()

+0

謝謝,但這是行不通的。如果我輸入0,它仍然要求新的輸入? – 2012-02-19 16:34:58

+0

爲我工作 - 你確定刪除了額外的'ReadUserInput()'調用嗎? – BrokenGlass 2012-02-19 16:39:43

3

如果你想打破swicthwhile,只需用return的關鍵字:

while (choice != 0) 
{ 
    if (int.TryParse(Console.ReadLine(), out choice)) 
    { 
     switch (choice) 
     { 
      case 0: 
       return; //returns from the FUNCTION! So from the switch AND while 
      .... 

      .... 

      .... 
     } 
    } 
} 
+0

第一次正常工作,但是當我第三次輸入0時,在輸入1或2後,它不起作用!? – 2012-02-19 16:51:10

+0

@ 3D-kreativ:不太清楚你的用戶交互如何工作,所以。你確定,在「1」,「2」之後再次調用Console.ReadLine()/ ReadChar(),以便從用戶獲得一個新的輸入嗎? – Tigran 2012-02-19 16:56:54

+0

問題解決了!我是一個調用一個方法的方法,該方法使用輸入來啓動該方法。現在它工作正常,沒有案件0:返回,我猜它應該沒有當while語句正在等待輸入0時工作。對?謝謝您的幫助! – 2012-02-19 17:09:07