6
ConsoleKeyInfo CKI = Console.ReadKey(true);

CKI.KeyChar 是字符输入的 unicode 等效项所以如果我在控制台提示符中按“1”,CKI.KeyChar 将是 49,而不是值“1”。

如何获得值“1”?

我知道这是获取输入的一种迂回方式,但这是我老师想要的方式,所以我不能这样做。

编辑:我需要用户给出的值,因为我将不得不检查它是否小于 9

4

4 回答 4

7

使用该.KeyChar属性并与 比较Char.IsNumber

要获得等效的数字,您可以使用Int32.Parseor Int32.TryParse

Int32 number;
if (Int32.TryParse(cki.KeyChar.ToString(), out number))
{
  Console.WriteLine("Number: {0}, Less than 9?: {1}", number, number < 9);
}

测试应用:

using System;

namespace Test
{
    public static void Main()
{
    Console.WriteLine("Press CTRL+C to exit, otherwise press any key.");
    ConsoleKeyInfo cki;
    do
    {
        cki = Console.ReadKey(true);
        if (!Char.IsNumber(cki.KeyChar))
        {
            Console.WriteLine("Non-numeric input");
        }
        else
        {
            Int32 number;
            if (Int32.TryParse(cki.KeyChar.ToString(), out number))
            {
                Console.WriteLine("Number received: {0}; <9? {1}", number, number < 9);
            }
            else
            {
                Console.WriteLine("Unable to parse input");
            }
        }
    }
    while (cki.KeyChar != 27);
}
}
于 2012-09-28T17:14:24.480 回答
6

用这个:

char.IsDigit(CKI.KeyChar);

如果您需要将其转换为数字,请使用以下命令:

int myNumber = int.Parse(CKI.KeyChar.ToString())

要检查它是否小于 9,请执行以下操作:

if (myNumber < 9)
{
     // Its less than 9. Do Something
} else {
     // Its not less than 9. Do something else
}
于 2012-09-28T17:14:12.017 回答
1

你可以用简单的方法来做(见下文),或者你可以使用枚举ConsoleKey来识别按下了哪个键——ConsoleKey.D[0-9]是普通的十进制数字键,还是ConsoleKey.NumPad[0-9]数字键盘键。可能想检查使用 enum 按下了哪些修饰符ConsoleModifiers。该枚举具有Flags属性,因此可以将值与按位或组合。例如,如果属性ConsoleKeyInfo.ModifiersConsoleModifiers.Control|ConsoleModifiers.Alt,则用户按下 [CTL] 和 [ALT] 键以及按下的任何其他键。

public static void Main( string[] args )
{

  Console.TreatControlCAsInput = true ;

  Console.Write("? ") ;
  while ( true )
  {
    ConsoleKeyInfo keystroke = Console.ReadKey() ;
    Console.WriteLine();

    if ( keystroke.Modifiers == ConsoleModifiers.Control && keystroke.Key == ConsoleKey.C ) break ;

    int decimalDigit = ((int)keystroke.KeyChar) - ((int)'0') ;
    if ( decimalDigit >= 0 && decimalDigit <= 9 )
    {
      Console.WriteLine("Decimal Digit {0}", decimalDigit ) ;
    }
    else
    {
      Console.WriteLine( "Not a decimal digit!" ) ;
    }
    Console.Write("? ") ;
  }

  return;
}
于 2012-09-28T20:07:39.853 回答
0

49 只是一个ASCII码,所以你可以做得到char c = (char) 49实际的字符。

于 2012-09-28T17:16:17.937 回答