【问题标题】:first Console.ReadLine() returns immediately第一个 Console.ReadLine() 立即返回
【发布时间】:2013-06-18 10:56:47
【问题描述】:

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

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

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();

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

【问题讨论】:

    标签: c# console-application


    【解决方案1】:

    这是因为您使用的是Console.Read,它会到达一个字符,但会在它后面单独留下回车符。然后由ReadLine 接收。

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

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

    【讨论】:

      猜你喜欢
      • 2014-04-08
      • 2012-07-13
      • 2022-06-13
      • 1970-01-01
      • 2010-10-14
      • 1970-01-01
      • 1970-01-01
      • 2018-02-11
      • 2011-10-16
      相关资源
      最近更新 更多