Console.ReadKey, кажется, читает не тот ключ? - PullRequest
1 голос
/ 16 марта 2020

Я только начинаю, так что я в процессе написания своего первого консольного приложения с нуля. У меня есть эта строка кода, когда я нажимаю d, она корректно выводит меня на следующий шаг и устанавливает недостаток в true, однако, если я нажимаю a, она выполняет оператор else по какой-то причине. Есть идеи, в чем причина?

Console.WriteLine("Press the A key for advantage, or the D key for disadvantage");
var rollType = Console.ReadKey();
Console.WriteLine(System.Environment.NewLine);
if (rollType.Key == ConsoleKey.A)
{
    advantage = true;
}
if (rollType.Key == ConsoleKey.D)
{
    disadvantage = true;
}
else
{
    Console.WriteLine("Invalid Input");
    StartApp();
}

Ответы [ 3 ]

0 голосов
/ 16 марта 2020

Если вы нажмете A, это изменит A и остальную часть D. В конце концов, A равно A, но A не равно D.

То, что вы хотите, вероятно, является переключателем / case case.

switch(rollType){
case ConsoleKey.A:
  advantage = true;
  break;
case ConsoleKey.D:
  disadvantage = true;
  break;
default:
  Console.WriteLine("Invalid Input");
  break;
}

switch / case Statement и do / while l oop - эти два элемента являются основой потока консольных программ.

0 голосов
/ 16 марта 2020

Просто добавьте, сделайте это маленькое изменение! (Добавление else в ваше второе условное выражение)

if (rollType.Key == ConsoleKey.A)
{
    advantage = true;
}
else if (rollType.Key == ConsoleKey.D)
{
    disadvantage = true;
}
else
{
    Console.WriteLine("Invalid Input");
    StartApp();
}

То, что происходило до того, как ваша консоль прочитала бы клавишу A и ввела первое условное выражение. Так как второе и третье условные выражения отделены от первого, второе также будет проверено, и если оно не истинно (что в данном случае не будет истинным), то не имеет значения, что вводить оператор else. Надеюсь это поможет.

0 голосов
/ 16 марта 2020

Похоже, что программа выполняется точно так, как вы ее написали.

if (rollType.Key == ConsoleKey.A)
            {
                advantage = true;
            } // First conditional check ends here

// This is another conditional block
            if (rollType.Key == ConsoleKey.D)
            {
                disadvantage = true;
            }
            else // You pressed A, so this block is executed
            {
                Console.WriteLine("Invalid Input");
                StartApp();
            }
...