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

我有以下代码

char c1 = (char)Console.Read(); Console.WriteLine("Enter a string."); string instr = Console.ReadLine(); 

它需要一个c1值,然后打印“输入一个字符串”。 但是当我尝试输入一个字符串时,它似乎像ReadKey()一样工作,这意味着只要按下任何键,它就会显示instr具有空值。

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

为什么是这样?

当你调用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(); 

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