2016-07-01 8 views
-2

Ich schreibe einen Code, der den Benutzer nach seinem Namen fragt, und wenn er einen Witz lesen will. Die Antwort sollte auf y oder n beschränkt sein. Jedes andere Zeichen sollte als ungültig betrachtet werden und sollte zu der Frage zurückkehren. Hier ist, was ich bisher gemacht habe.Beschränken Benutzer auf Eingabe y oder n und zeigen Ergebnis entsprechend in C#

static void Main(string[] args) 
    { 
     string name=""; 
     string KeyChar; 

     Console.WriteLine("Hello, what is your name?"); 
     name=Console.ReadLine(); 

     Console.WriteLine("Greetings, " + name + ". Would you like to read a joke? (y/n)"); 

     ConsoleKeyInfo result = Console.ReadKey(); 
     Console.WriteLine("\n"); 

     while (true) 
     { 

      while ((result.KeyChar != 'Y') || (result.KeyChar != 'y') || (result.KeyChar != 'N') || (result.KeyChar != 'n')) 
      { 
       Console.WriteLine("Invalid key. Limit your answer to y or n"); 
       break; 
      } 

      while ((result.KeyChar == 'Y') || (result.KeyChar == 'y') || (result.KeyChar == 'N') || (result.KeyChar == 'n')) 
      { 
       if ((result.KeyChar == 'Y') || (result.KeyChar == 'y')) 
       { 
        Console.WriteLine("Joke question?"); 
        Console.ReadLine(); 
        Console.WriteLine("Joke answer."); 
        break; 
       } 
       else if ((result.KeyChar == 'N') || (result.KeyChar == 'n')) 
       { 
        Console.WriteLine("You're missing on all the fun! Suit yourself. Goodbye!"); 
        break; 
       } 

      } 
     } 

    } 
+0

Ergebnis = Console.ReadKey(); am ende von while (wahr) und ersetze deine 2 inneren whites mit ifs. – Master117

Antwort

0

Sie würden eine separate Methode besser dran, das Schreiben zum Beispiel für ein Y oder N, zu fragen:

public static char YorN(string prompt) 
{ 
    Console.Write(prompt + " "); 

    while (true) 
    { 
     char input = char.ToUpper(Console.ReadKey().KeyChar); 

     if (input == 'Y' || input == 'N') 
     { 
      Console.WriteLine(); 
      return input; 
     } 

     Console.Write("\b \b"); // Use backspace ('\b') to erase the incorrect character. 
    } 
} 

Dann würden Sie es nicht in einer Schleife aufrufen müssen:

Console.WriteLine("Hello, what is your name?"); 
string name = Console.ReadLine(); 

char response = YorN("Greetings, " + name + ". Would you like to read a joke? (y/n)"); 

if (response == 'Y') 
{ 
    Console.WriteLine("Joke question?"); 
    Console.ReadLine(); 
    Console.WriteLine("Joke answer."); 
} 
else 
{ 
    Console.WriteLine("You're missing on all the fun! Suit yourself. Goodbye!"); 
}