Console.ReadLine()跳过第一个输入字符

时间:2013-05-01 05:09:22

标签: c#

Console.WriteLine("You have not installed Microsoft SQL Server 2008 R2, do you want to install it now? (Y/N): ");
//var answerKey = Console.ReadKey();
//var answer = answerKey.Key;
var answer = Console.ReadLine();
Console.WriteLine("After key pressed.");
Console.WriteLine("Before checking the pressed key.");

//if(answer == ConsoleKey.N || answer != ConsoleKey.Y)
if (string.IsNullOrEmpty(answer) || string.IsNullOrEmpty(answer.Trim()) || string.Compare(answer.Trim(), "N", true) == 0)
{
    Console.WriteLine("The installation can not proceed.");
    Console.Read();
    return;
}

我试图输入这些:

  • y - >它给了我一个空字符串,
  • y(空白+ y) - >它给了我“y”

我检查了其他类似的帖子,但没有一个能解决我的问题。 ReadLine()仍会跳过第一个输入字符。

更新已解决,see below

3 个答案:

答案 0 :(得分:1)

建议更改:

Console.Write("Enter some text: ");
String response = Console.ReadLine();
Console.WriteLine("You entered: " + response + ".");

关键点:

1)字符串可能是最容易处理的控制台输入类型

2)控制台输入是面向行的 - 您必须在输入可用于程序之前键入“Enter”。

答案 1 :(得分:1)

谢谢大家回复我的帖子。

不考虑我的代码中的多线程功能,这是我的不好。我会尝试解释我的错误,以便对你的所有回复说声谢谢。

BackgroundWorker worker = .....;
  public static void Main(string[] args)
    {
        InitWorker();
        Console.Read();
    }

public static void InitWorker()
{
    ....
    worker.RunWorkerAsync();
}


static void worker_DoWork(....)
{
  .....this is where I wrote the code...
}

问题是我启动了一个与主机线程异步运行的子线程。当子线程运行到这一行时:var answer = Console.ReadLine(); 主机线程运行到Console.Read();同时。 所以发生的事情看起来我输入了一个var answer = Console.ReadLine();的字符,但它实际上是在主机线程上运行的Console.Read()然后它转了用于ReadLine()的子线程。当子线程从键盘获得输入时,主机线程已经获取了第一个输入字符,然后整个程序完成并关闭。

我希望我的解释清楚。

答案 2 :(得分:0)

基本上你需要更改Console.Read - >到Console.ReadLine