第二个Console.Read();被忽略了

时间:2016-10-29 19:25:52

标签: c# console key

这是我的代码,没有基本的'使用'和命名空间,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();

3 个答案:

答案 0 :(得分:2)

  

当您键入输入字符时,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()将从序列中获取下一个字符并从输入中返回第二个字符,所以我想你应该使用{ {1}}。

答案 1 :(得分:1)

尝试使用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()时,它将从前一个输入中读取流中的下一个字符。

答案 2 :(得分:0)

我刚测试了这个,我看到了你所看到的相同功能。我不确定为什么它会在按下返回后立即退出。 Console.ReadLine()以我期望您的代码工作的方式运行。

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

  

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