2014-10-31 63 views
2

我剛剛學習c#,在繼續之前,我喜歡瞭解所有內容。爲什麼我需要2個Console.ReadLine();暫停控制檯?

我遇到的問題是我需要2 Console.ReadLine();暫停控制檯。如果我只使用1,則程序在輸入後結束。那麼爲什麼它需要2個readline方法而不是?有任何想法嗎?

請注意,在我的代碼中,我已經評論了1種readline方法,我希望我的程序能夠工作,但事實並非如此。然而,刪除評論允許程序工作,但我不明白爲什麼。

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace CoinFlip 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 

      Random rng = new Random(); 
      Console.WriteLine(@" 

This program will allow you to guess heads or tails on a coin flip. 

Please enter h for heads, or t for tails and press Enter: "); 

      char userGuess = (char)Console.Read(); 
      int coin = rng.Next(0,2); 

      Console.WriteLine("Coin is {0}\n\n", coin); 


      if (coin == 0 && (userGuess == 'h' || userGuess == 'H')) 
      { 

       Console.WriteLine("It's heads! You win!"); 

      } 
      else if (coin == 1 && (userGuess == 't' || userGuess == 'T')) 
      { 
       Console.WriteLine("It's tails! You win!"); 

      } 
      else if (userGuess != 't' && userGuess != 'T' && userGuess != 'h' && userGuess != 'H') 
      { 
       Console.WriteLine("You didn't enter a valid letter"); 
      } 

      else 
      { 

       if (coin == 0) { Console.WriteLine("You lose mofo. The coin was heads!"); } 
       if (coin == 1) { Console.WriteLine("You lose mofo. The coin was tails!"); } 

      } 
      Console.ReadLine(); 
      //Console.ReadLine(); 
     } 
    } 
} 
+0

還要注意的行:Console.WriteLine( 「硬幣是{0} \ n \ n」 個,硬幣); 是因爲我可以看到自己的變數。這將從最終的程序中刪除。 – user4202953 2014-10-31 15:04:50

回答

4

您使用Console.Read(),讀取單個字符用戶回車後。然而,它只消耗那個單個字符 - 這意味着該行的其餘部分(即使它是空的)仍然在等待被消耗......其中Console.ReadLine()正在執行。

這個最簡單的解決辦法是使用Console.ReadLine()較早太:

string userGuess = Console.ReadLine(); 

..那麼也許檢查猜測是單個字符,或者只是改變你所有的字符文字(如't')以字符串文字(例如"t")。

(或者使用Console.ReadKey()作爲Servy建議。這取決於你是否希望用戶回車,或不。)

+0

乾杯傢伙,哇,你超級快,解釋得很好。 隨着你的解釋,我在底部添加了下面的代碼來測試你在說什麼: Console.WriteLine(Console.ReadLine()); Console.ReadLine(); 然後我寫番茄 果然,它用t代替尾巴,然後在console.writeline – user4202953 2014-10-31 15:14:50

+2

上讀出「omato」。我還買了一本名爲C#深度第三版的書,我計劃在閱讀完I瞭解基礎知識。不知道你是否是同一個人寫的。 – user4202953 2014-10-31 15:16:56

+2

@ user4202953:是的,我是。希望你喜歡它:) – 2014-10-31 15:19:42

3

簡短的回答,不要使用Console.Read。直到您提交一行文本才能讀取任何內容,但它只讀取該行文本的第一個字符,並將該行的其餘部分留給進一步的控制檯輸入,例如,致電Console.ReadLine。使用Console.ReadKey而不是Console.Read來讀取單個字符。

+0

感謝您的答案。儘管我更瞭解喬恩的解釋。你確實向我介紹了一個新的方法* Console.ReadKey,我一定會玩。謝謝。 :) – user4202953 2014-10-31 15:28:02

0

第一個Console.ReadLine()被使用輸入鍵,因此程序結束。
嘗試此代替Console.Read()

var consoleKeyInfo = Console.ReadKey(); 
    var userGuess = consoleKeyInfo.KeyChar; 
相關問題