【问题标题】:C# Console.ReadKey read numbers greater than 9C# Console.ReadKey 读取大于 9 的数字
【发布时间】:2011-04-11 13:42:11
【问题描述】:

我在 C# 中使用 ConsoleKeyInfo,但是当我尝试在控制台中写入大于 9 的数字时遇到 Console.ReadKey 问题,例如

ConsoleKeyInfo number;
Console.Write("Write a number: ");
number = Console.ReadKey();

如果我想写 10 或 11...控制台只读取“1”

我不想使用 Console.ReadLine,因为我不想为每个数字按“Enter”。

还有其他方法可以使用 Console.ReadKey 等待 1 秒再继续吗?

谢谢

【问题讨论】:

  • 您可以输入10<Enter>(只能输入一个Enter)并使用ReadLine 阅读。你可以吗?
  • 对,因为ReadKey 只读取一个单个键。除非您按下一个键来指示,否则计算机如何知道您已完成输入数字?以前叫“Any”键,现在叫“Enter”。
  • Console.Readkey 根据定义只读取一个字符。来自 MSDN:'...获取用户按下的下一个字符或功能键'。
  • 那你怎么知道一个数字已经输入完毕?
  • @elmer:告诉我们你想要做什么。解释为什么 ReadLine 不会削减它,那 1 秒的延迟是什么,以及为什么您认为 ReadKey 会有所帮助。帮助我们帮助您。

标签: c# .net console console.readkey


【解决方案1】:

正如问题中的 cmets 所说,Console.ReadKey 根据定义仅读取单个 key。如果您想从控制台获得更多输入,您将需要使用不同的功能。尝试这样的事情,例如:

Console.Write("Write a number: ");
string line = Console.ReadLine();
int num = 0;
if (line != null)
    num = int.Parse(line);

这是一个开始,只有最少的错误检查。看看你能从那里得到什么。

【讨论】:

    【解决方案2】:

    你能做的最好的就是使用Console.ReadLine()。程序不可能知道你已经完成了这个数字。

    更新

    如果你有一个固定长度的数字(即一个 13 位的 ISBN),你可以使用 ReadKey,但是像这样:

    string isbn = "";
    while (isbn.Length < 13)
    {
        isbn += Console.ReadKey().KeyChar;
    }
    

    【讨论】:

    • 好吧,如果该号码是 13 位 ISBN 怎么办?程序知道到第 13 位结束。
    • 在按下第一个键后程序不能等待一秒钟才能继续?
    • @Martinho - 虽然该陈述是正确的,但这不是 OP 所要求的。没有迹象表明数字的大小是否有限制,或者数字总是相同的位数长。
    • @elmer - 等待的问题是你可能对某些人来说太快了,所以他们可能没有机会完成一个长号码“123456780987634734” - 例如,特别是如果他们仔细检查他们做对了。
    • @Martinho - 刚刚添加了一些代码来使用 ReadKey 处理固定长度的输入。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-21
    • 1970-01-01
    • 1970-01-01
    • 2014-01-15
    • 2020-06-27
    相关资源
    最近更新 更多