为什么在使用read()之后从c#中的控制台获取空值以获取readLine()

dny*_*war 3 .net c# console.readline

我有以下代码

char c1 = (char)Console.Read();
Console.WriteLine("Enter a string.");
string instr = Console.ReadLine();
Run Code Online (Sandbox Code Playgroud)

它需要一个值c1,然后打印"输入一个字符串".然而,当我尝试输入一个字符串时,它看起来像是一样ReadKey(),这意味着只要按下任何键,它就显示出instr一个空值.

如果我删除第一行(char c1 = (char)Console.Read();),程序可以正常工作.

为什么是这样?

Rud*_*ser 5

当你调用时Read(),它仍会阻塞,直到你按Enter键为止,即使实际方法只消耗输入流中的一个字符.当您随后按Enter键时,该字符确实被读取,但换行符不是.由于换行仍然在输入流中,因此调用ReadLine()立即返回,因为它读取了行终止符.如果要进行调试,可以更深入地看到此行为.

要解决这个问题,我可以建议以下内容,使用ReadKey():

char c1 = Console.ReadKey().KeyChar;
Console.WriteLine(Environment.NewLine /* Added simply for readability */
    + "Enter a string.");
string instr = Console.ReadLine();
Run Code Online (Sandbox Code Playgroud)

如果您希望用户在之后仍然按Enter键Read(),只需使用ReadLine并为第一个字符取一个子字符串.