【问题标题】:Second Console.Read(); is being ignored第二个 Console.Read();被忽略
【发布时间】:2016-10-29 19:25:51
【问题描述】:

这是我的代码,没有基本的“使用”和命名空间,static void main 字符串行(复制得不够好)。第一个 Console.Read();工作正常,我可以输入我的名字,它写得很好,但是第二个 Console.Read();被忽略。它只是写“我很好。你会的......”我什至不能在第一个 Console.Read(); 之后和 Console.ReadKey(); 之前写任何东西

有什么帮助吗?

Console.WriteLine("Welcome to the game. What is your name?");
Console.Write("It's ");
Console.Read();
Console.WriteLine("That sounds amazing! How old are you?");
Console.Write("I'm ");
Console.Read();
Console.WriteLine("OK. You will be taught some basic mathematics. Get ready...");
Console.WriteLine("When you're ready, press any key!");
Console.ReadKey();
Console.Clear();

【问题讨论】:

  • 你的名字写得怎么样?它是怎么得到你的名字的?

标签: c# console key


【解决方案1】:

当您键入输入字符时,Read 方法会阻止其返回;当你按下 Enter 键时它会终止。

Console.Read()Console.ReadLine() 之间的主要区别在于,Console.Read() 只会从序列中提取一个字符,而Console.ReadLine() 会占用整行,所以在你的情况下,如果你这样做:

int x;
Console.WriteLine("Welcome to the game. What is your name?");
Console.Write("It's ");
x = Console.Read();
Console.WriteLine("Char: " + Convert.ToChar(x)+";");
x = Console.Read();
Console.WriteLine("Char: " + Convert.ToChar(x)+";");

您会注意到您只有一个字符,并且因为您输入了更多字符,所以您的第二个 Console.Read() 将从序列中获取下一个字符并从您的输入中返回第二个字符,所以我想您应该使用 Console.ReadLine()

【讨论】:

  • 这就是发生这种情况的原因。
【解决方案2】:

尝试改用 Console.ReadLine()。

        Console.WriteLine( "Welcome to the game. What is your name?" );
        Console.Write( "It's " );
        var name = Console.ReadLine( );
        Console.WriteLine( $"Hello {name}, How old are you?" );
        Console.Write( "I'm " );
        Console.ReadLine( );
        Console.WriteLine( "OK. You will be taught some basic mathematics. Get ready..." );
        Console.WriteLine( "When you're ready, press any key!" );
        Console.ReadKey( );
        Console.Clear( );

因为选择了我的答案,所以我想指出 Salih H. 发生这种情况的原因是正确的。 Console.Read 只从流中读取 1 个字符。如果输入了更多字符,则流中将有更多数据,因此下次调用 Console.Read() 时,它将从前一个输入中读取流中的下一个字符。

【讨论】:

    【解决方案3】:

    我刚刚对此进行了测试,我看到的功能与您看到的相同。我不确定为什么它在按回车后立即退出。 Console.ReadLine() 的功能与我希望您的代码正常工作的方式一样。

    我相信this 文档说明了对Console.Read() 的第二次调用立即终止的原因。

    对 Read 方法的后续调用一次检索一个字符。检索到最后一个字符后,Read 再次阻止其返回并重复循环。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多