Как запретить весь нечисловой ввод в консоли во время ввода? - PullRequest
6 голосов
/ 18 марта 2011

Говорящая консоль здесь.

Идея состоит в том, что если пользователь нажимает любую клавишу, кроме цифр (те, что над буквенными клавишами и цифровая клавиатура) во время ввода ввода в консоли, то ничего не будет напечатано. Это как если бы консоль игнорировала любые нечисловые нажатия клавиш.

Как сделать это правильно?

Ответы [ 3 ]

9 голосов
/ 18 марта 2011

Попробуйте метод ReadKey:

while (processing input)
{
  ConsoleKeyInfo input_info = Console.ReadKey (true); // true stops echoing
  char input = input_info.KeyChar;

  if (char.IsDigit (input))
  {
     Console.Write (input);
     // and any processing you may want to do with the input
  }
}
1 голос
/ 18 марта 2011
private static void Main(string[] args) {

    bool inputComplete = false;
    System.Text.StringBuilder sb = new System.Text.StringBuilder();
    while (!inputComplete ) {

        System.ConsoleKeyInfo key = System.Console.ReadKey(true);

        if (key.Key == System.ConsoleKey.Enter ) {                
            inputComplete = true;
        }
        else if (char.IsDigit(key.KeyChar)) {
            sb.Append(key.KeyChar);
            System.Console.Write(key.KeyChar.ToString());
        }
    }

    System.Console.WriteLine();
    System.Console.WriteLine(sb.ToString() + " was entered");
}
0 голосов
/ 18 марта 2011

Этот маленький эксперимент работает так:

static void Main()
{
    while (true)
    {
        var key = Console.ReadKey(true);
        int i;
        if (int.TryParse(key.KeyChar.ToString(), out i))
        {
            Console.Write(key.KeyChar);
        }
    }
}
...