调用自身的方法没有完全执行

时间:2014-04-17 11:57:09

标签: c# .net recursion console stdin

这是一个简单的例子来说明问题:

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:

1 个答案:

答案 0 :(得分:3)

这是一种预期的行为。 ReadLine将读取字符,直至找到'\n' 另一方面,Read将无法读取'\n',因此当您阅读 r 命令时,您的缓冲区中会有'\n',因此您将进入{{ 1}}并直接传递。

所以你必须清理缓冲区一个简单的ReadLine就可以了。

ReadLine