ConsoleKeyInfo CKI = Console.ReadKey(true);
CKI.KeyChar 是字符输入的 unicode 等效项所以如果我在控制台提示符中按“1”,CKI.KeyChar 将是 49,而不是值“1”。
如何获得值“1”?
我知道这是获取输入的一种迂回方式,但这是我老师想要的方式,所以我不能这样做。
编辑:我需要用户给出的值,因为我将不得不检查它是否小于 9
使用该.KeyChar
属性并与 比较Char.IsNumber
。
要获得等效的数字,您可以使用Int32.Parse
or 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);
}
}
用这个:
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
}
你可以用简单的方法来做(见下文),或者你可以使用枚举ConsoleKey
来识别按下了哪个键——ConsoleKey.D[0-9]
是普通的十进制数字键,还是ConsoleKey.NumPad[0-9]
数字键盘键。可能想检查使用 enum 按下了哪些修饰符ConsoleModifiers
。该枚举具有Flags
属性,因此可以将值与按位或组合。例如,如果属性ConsoleKeyInfo.Modifiers
是ConsoleModifiers.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;
}
49 只是一个ASCII码,所以你可以做得到char c = (char) 49
实际的字符。