为什么在使用read()之后从控制台中为readLine()获取null值

本文关键字:readLine null 获取 控制台 之后 read 为什么 | 更新日期: 2023-09-27 18:24:15

我有以下代码

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

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

如果我去掉第一行(char c1 = (char)Console.Read();),程序就能正常工作。

为什么会这样?

为什么在使用read()之后从控制台中为readLine()获取null值

当您调用Read()时,即使实际方法只使用输入流中的一个字符,它仍然会阻塞,直到您点击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并为第一个字符取一个子字符串即可。