关于c#:控制台在Console.Read()之后终止,即使结尾处带有Console.ReadLine()

Console terminates after Console.Read(), even with Console.ReadLine() at the end

以下代码要求您提供姓名。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Program
{
        static void Main(string[] args)
        {
            Console.Write("Enter your name:");
            string s = Console.ReadLine();
            Console.WriteLine("Your name:" + s);
            Console.Write("Enter your surname:");
            int r = Console.Read();
            Console.WriteLine("Your surname:" + r);

            Console.ReadLine();
        }
}

输入名称后,程序将成功显示您的输入。但是,输入姓氏后,程序将立即停止。据我了解,Console.Read()应该返回我输入的字符串的第一个字符的整数值(ASCII码?)。

为什么程序在Console.Read()之后立即终止? Console.ReadLine()是否应确保程序保持打开状态?我正在使用Visual Studio 2012.


当您告诉控制台输入您的姓氏时,您要输入一个字符。

1
2
Console.Write("Enter your surname:");
int r = Console.Read();

这肯定是一个ReadLine,然后是另一个ReadLine,然后退出。您可能正在输入第一个字符(进入"读取"),然后输入后续字符,然后按Enter键以接受该姓氏,但实际上您位于将要退出的ReadLine上。因此:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Program
{
    static void Main(string[] args)
    {
        Console.Write("Enter your name:");
        string s = Console.ReadLine();
        Console.WriteLine("Your name:" + s);
        Console.Write("Enter your surname:");

        // change here
        string surname = Console.ReadLine();
        Console.WriteLine("Your surname:" + surname);

        Console.ReadLine();
    }
}

对于int r = Console.Read(),该程序不会终止。


基于控制台应用程序的运行方式,它将执行所有代码行,然后"返回"。完成此操作后,它将按照所有意图和目的关闭程序,并完成了所需的操作。完成后,它不会围坐并打开。

如果希望窗口保持打开状态,请在最后写入Console.Readline(),它将保持打开状态,直到完成一些输入为止。我记得刚开始时遇到这个问题,这与程序意外关闭无关,而是您希望在关闭前在控制台中查看结果。