Если есть в любом случае, я мог бы использовать вместо сделать все, как readkey? мне нужно выйти только когда я ввел "q"; - PullRequest
0 голосов
/ 29 января 2020

Если я использую readline(), я не смогу использовать readkey();, чтобы избежать чтения дважды

Console.Write("Your selection is: ");
bSelAns = int.TryParse(Console.ReadLine(), out iSelection);
string ans =iSelection.ToString();

Я делаю readline, поэтому я стараюсь избегать readkey();

ConsoleKey keychar ;
keychar = ConsoleKey.Q;
string y = "q";

Мне нужно выйти из bool, когда я введу q;

if (bSelAns ==false)
{
  if (ans == y)
  {
    break;
  }

  Console.WriteLine("You have entered an invalid strinng, please enter a number or string from the list.\n");
}

1 Ответ

1 голос
/ 29 января 2020

Извините, мне кажется, я неправильно понял, что вы искали. Итак, я думаю, что вы хотите, чтобы иметь возможность использовать ReadKey и Readline вместе? это невозможно, поскольку ReadKey завершается после первого символа, а readLine заканчивается при нажатии Enter. Однако вы можете заставить ReadKey действовать как ReadLine, а затем вы можете проверить, нажата ли клавиша Q для каждого нажатия клавиши. для этого вам нужен буфер, который сохраняет все нажатия клавиш, и каждый раз, когда нажимается «Enter», он очищает буфер на экран.

Edit: Logi c для «Enter» изменен на сброс, если нажата, даже если буфер пуст

Edit2: добавлены комментарии

using System;
class Program
{
    public static void Main(string[] args){
        var buffer = "";
        while(true){
            //Only show if buffer is empty
            if(buffer.Length == 0){
            Console.WriteLine("enter key:");
            }
            var key = Console.ReadKey(false);

            //Only Exit if buffer is empty and Q is pressed (if Q is the first Key pressed)
            if(buffer.Length == 0 && key.Key == ConsoleKey.Q){
                Console.WriteLine();
                Console.WriteLine("the key was 'Q' goodbye");
                return;
            }
            //Every time Enter is pressed, Use and Flush the buffer
            else if(key.Key == ConsoleKey.Enter)
            {
                if(buffer.Length > 0){
                    Console.WriteLine();
                    Console.WriteLine("buffer have {0}", buffer);
                    if(int.TryParse(buffer, out int number)){
                        Console.WriteLine("{0} is a number!", number);
                    }
                }
                buffer = "";
            }
            //else will capture everything else pressed, and add it to buffer
            else{
                buffer += key.KeyChar;
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...