2011-10-28 22 views
5

Mam małą aplikację konsoli C#, którą piszę.C# Console.Readkey - czekaj na konkretne dane wejściowe

Chciałbym, aby aplikacja oczekiwała na instrukcje użytkownika dotyczące naciśnięcia Y lub N (jeśli zostanie naciśnięty inny klawisz, aplikacja zignoruje to i czeka na Y lub N, a następnie uruchomi kod zależny od odpowiedź Y lub N.

wpadłem na ten pomysł,

while (true) 
{ 
    ConsoleKeyInfo result = Console.ReadKey(); 
    if ((result.KeyChar == "Y") || (result.KeyChar == "y")) 
    { 
     Console.WriteLine("I'll now do stuff."); 
     break; 
    } 
    else if ((result.KeyChar == "N") || (result.KeyChar == "n")) 
    { 
     Console.WriteLine("I wont do anything"); 
     break; 
    } 
} 

Niestety chociaż VS mówi jej robi jak result.Keychat == jako operand cant być stosowane do „char” lub ' ciąg "

Proszę o pomoc?

Z góry dziękuję.

+0

pojedynczy cytat, nie podwójny ... (wynik.KeyChar == "Y") || (result.KeyChar =='y ') – ComeIn

Odpowiedz

8

KeyChar to char, natomiast "Y" to string.

Zamiast tego potrzebujesz czegoś takiego jak KeyChar == 'Y'.

+0

Dziękuję bardzo. Błąd ucznia z mojej strony. Nadal boryka się z C# po ruchu php! Dzięki jeszcze raz. – tripbrock

+0

Alternatywa byłaby następująca: 'result.Key == ConsoleKey.Y' – Carol

+0

@K_Rol: To może zadziałać. Obawiałabym się, że zaakceptuje nie tylko "Y" i "Shift + Y", ale także "Ctrl + Y". – Gabe

2

Sprawdź to zamiast

string result = Console.ReadLine(); 

A potem sprawdzić wynik

2

co szukasz jest coś takiego

 void PlayAgain() 
    { 
     Console.WriteLine("Would you like to play again? Y/N: "); 
     string result = Console.ReadLine(); 
     if (result.Equals("y", StringComparison.OrdinalIgnoreCase) || result.Equals("yes", StringComparison.OrdinalIgnoreCase)) 
     { 
      Start(); 
     } 
     else 
     { 
      Console.WriteLine("Thank you for playing."); 
      Console.ReadKey(); 
     } 
    } 
0

Prawdopodobnie użytkownik ma potwierdzić ich odpowiedź naciskając Enter , więc ReadLine jest najlepsza. Przekształć także odpowiedź łańcuchową na wielką literę, aby sprawdzić porównanie ogólne. Podobnie jak:

string result = Console.ReadLine(); 
if (result.ToUpper().Equals("Y")) 
{ 
    // Do what ya do ... 
Powiązane problemy