为什么我需要2 Console.ReadLine();暂停控制台?

时间:2014-10-31 15:03:21

标签: c# console.readline

我只是在学习c#,在继续学习之前我喜欢理解一切。

我遇到的问题是我需要2台Console.ReadLine();暂停控制台。如果我只使用1,程序在输入后结束。那为什么它需要2个readline方法而不是?有任何想法吗?

请注意,在我的代码中,我已经注释掉了一条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();
        }
    }
}

3 个答案:

答案 0 :(得分:4)

您正在使用Console.Read(),在用户点击后会读取单个字符。但是,它只消耗那个单个字符 - 这意味着该行的其余部分(即使它是空的)仍在等待消耗...... Console.ReadLine()正在进行。

最简单的解决方法是先前使用Console.ReadLine()

string userGuess = Console.ReadLine();

..然后可能会检查猜测是单个字符,还是只是将所有字符文字(例如't')更改为字符串文字(例如"t")。

(或者使用Console.ReadKey()作为Servy的建议。这取决于您是否希望用户点击返回。)

答案 1 :(得分:3)

简短的回答,请勿使用Console.Read。在提交一行文本之前它无法读取任何内容,但它只读取该行文本的第一个字符,剩下该行的其余部分用于进一步的控制台输入,例如调用Console.ReadLine 。使用Console.ReadKey代替Console.Read来阅读单个字符。

答案 2 :(得分:0)

第一个 Console.ReadLine() Enter 键使用,因此程序结束。
试试这个而不是 Console.Read()

    var consoleKeyInfo = Console.ReadKey();
    var userGuess = consoleKeyInfo.KeyChar;