为什么我需要 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();
}
}
}
您正在使用 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;