2014-10-31 111 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; 
相关问题