2013-09-25 76 views
0

事情是,它工作正常,它運行,但是當我輸入一個無效的字母時,程序返回標籤兩次,它返回兩次相同的選項,爲什麼?它應該回到開頭,並向我展示一次選項。C#轉換問題goto

namespace First_c_sharp_code 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      char livro; 
      label: 
      Console.Write("\n c: for computer books \n m: for mathematical books \n h: for history books \n e: for English books"); 
      livro = (char)Console.Read(); 

      switch (livro) 
      { 
       case 'c': 
        Console.WriteLine("Aprendendo C#"); 
        break; 
       case 'm': 
        Console.WriteLine("Somando com Pokemon"); 
        break; 
       case 'h': 
        Console.WriteLine("Brasil dos Índios"); 
        break; 
       case 'e': 
        Console.WriteLine("CCAA Book"); 
        break; 
       default: 
        Console.WriteLine("\n Opção Inválida. Tente novamente"); 
        goto label; 
      } 
     } 
    } 
} 
+0

是的。不要使用'goto'。 –

回答

3

這就是問題之行:

livro = (char)Console.Read(); 

的問題是,Console.Read()只需要一個字符。但是,當您鍵入x並按回車時,緩衝區中有兩個字符,x\n(換行符)。因此,當下一個Console.Read()發生時,它立即返回\n,根據您的switch這也是無效的,並且您再次循環。

如果您要輸入xxxx,您會看到每個x都會循環一次,直到輸入緩衝區再次爲空。

試試這個:

livro = Console.ReadLine().FirstOrDefault(); 

在這裏,您讀取輸入的整行(不包括\n),以及(如果用戶只需按下回車或\0)採取的第一個字符。

+0

非常感謝,真的幫了大忙! –