2015-09-21 3 views
0

Не уверен, что я пропускаю что-то действительно простое, но я пытаюсь создать программу, которая позволяет пользователю вводить 1 из 2 букв, а затем запускать код на основе ввода. Кажется достаточно простым, но я столкнулся с несколькими ошибками со всеми способами, которые, как я думал, это может сработать. Вот код:Как проверить ввод пользователя с помощью команды

string name = (Console.ReadLine()); 
Console.WriteLine("Is " + name + " ok?"); 
Console.WriteLine("\n(Y)es\n(N)o"); 
char ansys = Console.ReadKey(); 
if (ansys = ConsoleKey.Y) 
    Console.Clear(); 
else 
{ 
    Console.WriteLine(); 
    Console.WriteLine("Enter letters only"); 
} 

Я добавил в части еще (незавершенной) только, чтобы получить представление о том, если Если я иду в правильном направлении с намеченной цели, а также. Смогу ли я сделать инструкцию else, которая срабатывает, если ни Y, ни N не будут нажаты таким образом?

ответ

1

Ну, в первую очередь, вы делаете назначение, не сравниваю:

if (ansys.Key = ConsoleKey.Y) 

неправильно, используйте:

if (ansys.Key == ConsoleKey.X) 

== является сравнение, = это назначение. Не путайте их, это может вызвать серьезные проблемы.

Для вас вопрос, если вы просто добавили оператор else if, проверяющий ответ «Нет», тогда оператор else не будет запущен, если нажаты Y или N. Если выполняется хотя бы оператор if, оператор else не будет выполнен.

Ваш код должен выглядеть следующим образом:

if (ansys == ConsoleKey.Y) { 
    // code if yes 
} 
else if (ansys == ConsoleKey.N) { 
    // code if no 
} 
else { 
    // code if neither 
} 

Edit: Поскольку мой основной язык не является C#, я посмотрел на документацию, чтобы проверить мой ответ. Я понял, что если вы используете ReadKey(), он не возвращает ConsoleKey, он возвращает struct ConsoleKeyInfo. Для доступа к нажатой клавише необходимо использовать Key член ConsoleKeyInfo. Повторите проверку кода.

0

Попробуйте этот подход:

ConsoleKeyInfo cki; 
cki = Console.ReadKey(); 

if (cki.Key == ConsoleKey.Y) 
{ 
    Console.Clear(); 
} 
else if (cki.Key == Console.N) 
{ 
    Console.Clear(); 
} 
else 
{ 
    Console.WriteLine(); 
    Console.WriteLine("Enter letters only"); 
} 

Вы можете найти й примеры здесь: ReadKey - examples

0

Попробуйте это:

string name = (Console.ReadLine()); 
Console.WriteLine("Is " + name + " ok?"); 
Console.WriteLine("\n(Y)es\n(N)o"); 
var ansys = Console.ReadKey(); 
if (ansys.KeyChar == 'y' || ansys.KeyChar == 'Y') 
{ 
    //Handle yes case 
} 
if (ansys.KeyChar == 'n' || ansys.KeyChar == 'N') 
{ 
    //Handle no case 
} 
else 
{ 
    Console.WriteLine(); 
    Console.WriteLine("Enter letters only"); 
} 
0

Попробуйте это (не смогло проверить его)

  • Это будет запрашивать имя до ответ на этот вопрос: Y
  • Если ввод, когда спрошено Y или N, является другой вещью, он снова попросит подтверждение имени.

    string name = ""; 
    while (name.equals("")) 
    { 
        name = (Console.ReadLine()); 
        Console.WriteLine("Is " + name + " ok?"); 
    
        String answer = ""; 
        while(answer.equals("")) 
        { 
         Console.WriteLine("\n(Y)es\n(N)o"); 
         char ansys = Console.ReadKey(); 
         if (ansys == ConsoleKey.Y || ansys == ConsoleKey.N) 
         { 
          answer = ansys.ToString(); 
          Console.Clear(); 
         } 
         else 
         { 
          Console.WriteLine(); 
          Console.WriteLine("Enter letters only!!"); 
         } 
        } 
        if(!answer.equals("Y")) 
         name = ""; 
    } 
    

Я не уверен, если ansys.ToString() является правильным способом, и если это возвращает «Y» строку в случае нажата клавиша была Y