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