2011-10-28 12 views
5

Ho una piccola app per console C# che sto scrivendo.C# Console.Readkey - Attendi input specifico

Vorrei che l'app attenda le istruzioni dell'utente relative a un tasto Y o N (se si preme un altro tasto, l'app lo ignora e attende una Y o una N e quindi esegue il codice in base a la risposta Y o N.

mi è venuta questa idea,

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; 
    } 
} 

Purtroppo però VS dice la sua doesnt come il result.Keychat == come operando cant essere applicata ad un 'char' o ' string '

Qualsiasi aiuto per favore?

Grazie in anticipo.

+0

virgoletta singola, non doppia ... (result.KeyChar == 'Y') || (result.KeyChar == 'y') – ComeIn

risposta

8

KeyChar è un char mentre "Y" è un string.

Si desidera invece qualcosa come KeyChar == 'Y'.

+0

Grazie mille. Un errore da scolaretto da parte mia. Sto ancora lottando con C# dopo la mossa php! Grazie ancora. – tripbrock

+0

Un'alternativa sarebbe questa: 'result.Key == ConsoleKey.Y' – Carol

+0

@K_Rol: Potrebbe funzionare. Sarei preoccupato che accetti non solo 'Y' e' Shift + Y', ma anche 'Ctrl + Y'. – Gabe

2

Scegli questa invece

string result = Console.ReadLine(); 

e dopo il check il risultato

2

quello che cercate è qualcosa di simile

 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

Probabilmente si desidera che l'utente per confermare la loro risposta premendo enter , quindi ReadLine è il migliore. Converti anche la risposta stringa in lettere maiuscole per un controllo di confronto generico. Così:

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