这是一个简单的例子来说明问题:
class Test
{
static void PrintName()
{
Console.Out.Write("Enter your name: ");
string name = Console.In.ReadLine();
Console.WriteLine(name);
Console.Out.Write("\nEnter R to restart: ");
char r = Convert.ToChar(Console.In.Read());
if (r.ToString().Equals("r", StringComparison.OrdinalIgnoreCase))
PrintName();
else
Environment.Exit(0);
}
static void Main(string[] args)
{
PrintName();
}
}
基本上,PrintName要求重新启动。在第一次运行时,它接受用户输入并显示正确的名称。当要求重复此过程时,它只显示提示并询问您是否要重新启动。它跳过等待输入或显示输出。
更新:输出为:
Enter your name: Naven
Naven
Enter R to restart: r
Enter your name:
Enter R to restart: r
Enter your name:
Enter R to restart:
答案 0 :(得分:3)
这是一种预期的行为。
ReadLine
将读取字符,直至找到'\n'
另一方面,Read
将无法读取'\n'
,因此当您阅读 r 命令时,您的缓冲区中会有'\n'
,因此您将进入{{ 1}}并直接传递。
所以你必须清理缓冲区一个简单的ReadLine
就可以了。
ReadLine