首先Console.ReadLine()立即返回

时间:2013-06-18 10:56:47

标签: c# console-application

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

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

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

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

当我检查输入表单用户时,它确实读取了第二个,但是第一个字符串是空的 有任何想法吗?

1 个答案:

答案 0 :(得分:3)

这是因为你使用的Console.Read会到达一个角色,但仅在它之后就会留下回车符。然后由ReadLine提取。

输入是一个流。当您输入单个字符然后点击返回时,流中有2-3个字符(取决于系统):您输入的字符和换行符。 Read只会为您提供流中的下一个字符,而ReadLine会读取下一个换行符之前的所有内容。再次,从流。所以你的Read获取一个字符,ReadLine已经找到了下一个换行符,因此继续愉快。

您可以插入虚拟ReadLine,也可以使用ReadKey只读取密钥,在程序看到输入之前不需要返回,或使用{{1}也适用于单字符输入。