0

我正在编写一个非常愚蠢的程序。

我不知道为什么以下代码不起作用:

static void Main(string[] args){
        <Some silly code>
        Console.WriteLine("Please choose the lab you are working on:");
        int choose = Console.Read();
        <Some more silly code, including 1 Console.writeLine() call >

        Console.WriteLine("Enter the DB server location");
        string DBServer = Console.ReadLine();
        Console.WriteLine("Enter the DB name");
        string DBName = Console.ReadLine();
    }

当我运行程序时,它从不等待第一个 ReadLine 语句

string DBServer = Console.ReadLine();

它立即打印两行

Enter the DB server location  
Enter the DB name

然后读取第二个 ReadLinestring DBName = Console.ReadLine();

当我检查输入表单用户时,它确实很好地读取了第二个,但第一个字符串显示为空。
有任何想法吗?

4

1 回答 1

4

这是因为您正在使用Console.Readwhich 将到达一个字符,但会在它之后单独留下回车符。然后将被ReadLine.

输入是一个流。当您输入单个字符然后按回车键时,流中有 2-3 个字符(取决于系统):您输入的字符和换行符。Read只是给你流中的下一个字符,而ReadLine将读取所有内容直到下一个换行符。再次,从流中。因此,您Read获取了一个字符,并且 ReadLine 已经找到了下一个换行符,因此愉快地继续。

您可以插入一个 dummy ReadLine,或者使用ReadKey它只会读取一个键并且在您的程序看到输入之前不需要返回,或者也可以ReadLine用于单字符输入。

于 2013-06-18T10:58:09.917 回答