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

本文关键字:控制台 暂停 ReadLine Console 为什么 | 更新日期: 2023-09-27 18:28:41

我只是在学习 c#,我喜欢在继续之前了解所有内容。

我遇到的问题是我需要 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();
        }
    }
}

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

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

最简单的解决方法是更早地使用Console.ReadLine()

string userGuess = Console.ReadLine();

.. 然后也许检查猜测是否是单个字符,或者只是更改所有字符文字(例如 't' ( 到字符串文字(例如 "t" (。

(或者按照塞尔维的建议使用Console.ReadKey()。这取决于您是否希望用户点击返回。

简短的回答,不要使用Console.Read。 在您提交一行文本之前,它无法读取任何内容,但它只读取该行文本的第一个字符,而将该行的其余部分留给进一步的控制台输入,例如 ,例如调用Console.ReadLine。 使用 Console.ReadKey 而不是 Console.Read 来读取单个字符。

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

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