3

我有以下代码

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

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

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

为什么是这样?

4

1 回答 1

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();

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

于 2013-07-22T08:34:19.087 回答