6
ConsoleKeyInfo CKI = Console.ReadKey(true);

CKI.KeyCharは、文字入力に相当するUnicodeです。したがって、コンソールプロンプトで「1」を押すと、CKI.KeyCharは値「1」ではなく49になります。

値「1」を取得するにはどうすればよいですか?

私はそれが入力を取得するための不正な方法を知っていますが、それは私の先生がそれを望んでいる方法なので、私はそれ以外の方法でそれを行うことはできません。

編集:9未満かどうかを確認する必要があるため、ユーザーが指定した値が必要です

4

4 に答える 4

7

プロパティを使用して、.KeyCharと比較しChar.IsNumberます。

同等の数値を取得するには、Int32.Parseまたは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

簡単な方法で実行できます(以下を参照)。または、列挙型を使用して、押されたキー(通常の10進数キーと数字キーパッドキー)ConsoleKeyを識別できます。列挙型を使用して、どの修飾子が押されたかを確認したい場合があります。その列挙型には属性があるため、値をビット単位のORと組み合わせることができます。たとえば、プロパティがの場合、ユーザーは[CTL]キーと[ALT]キーを、他のキーが押されたときに押しました。ConsoleKey.D[0-9]ConsoleKey.NumPad[0-9]ConsoleModifiersFlagsConsoleKeyInfo.ModifiersConsoleModifiers.Control|ConsoleModifiers.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 に答える