2017-05-15 1 views
-1

Der Code, den ich gemacht habe, ist:Wie akzeptiert man nur "y" oder "n" in der Benutzereingabe in C++?

while (*user is not closing the program*) 
{ 
    cout << "Make a decision? (y/n) " << endl; 
    cin >> userAnswer; 
    ... 
    if (UsersAnswer != 'y' || UsersAnswer != 'n') 
     cout << "You may only type y or n."; 
} 

Aber wenn ich Sätze oder Worte zu fassen wie „Hallo“ es bricht der Code (Ausgänge „um eine Entscheidung treffen?“ Unendlich mal)

+0

Verwenden Sie eine 'while' Schleife. – wkl

+1

Woher kommt 'userAnswer'? –

+0

@wkl das Stück Code ist in einer While-Schleife –

Antwort

4

Sie wissen von do-while?

do 
{ 
    std::cout << "Yes or no yadda yadda yadda" << std::endl; 
    std::cin >> userAnswer; 
} 
while(!std::cin.fail() && userAnswer!='y' && userAnswer!='n'); 
+0

Gut, aber wenn ich mehr als ein Zeichen eingebe, wird "Ja oder Nein yadda yadda yadda" kontinuierlich gedruckt, bis die Eingabe leer ist. – Akira

3

Aber wenn ich Sätze oder Worte zu fassen wie „Hallo“ es bricht den Code (Ausgänge „um eine Entscheidung treffen?“ Unendliche Zeiten)

Der Grund, warum dies passiert ist, weil Sie hello eingegeben und Ihr Code liest Zeichen nach Zeichen, z 'h', 'e', 'l' usw. Für jeden char es überprüft, ob es 'y' ist oder 'n' und jedes Mal ist es das tut, was Ihr Code zu tun anweist: cout << "You may only type y or n."; und startet dann die Schleife mit cout << "Make a decision? (y/n) " << endl;

Um dies zu vermeiden Sie den Rest ignore könnten der Eingabe, wenn 'y' oder 'n' nicht eingegeben wird.

Weitere Punkte:

  • Sie müssen sicherstellen, dass Sie Ihre Schleife endet, wenn y oder n eingegeben
  • Sie für Großbuchstaben überprüfen sollten Y oder N sowie
  • aus dem Code ist es nicht klar, was sind userAnswer und UserAnswer. Wenn userAnswer ein string ist, dann sollten Sie vielleicht getline verwenden.
  • sollten Sie minimale Codebeispiel vor, dass andere laufen kann und nicht einige Pseudo-Code

Unter der Annahme, dass Ihr userAnsweryou could do it this way ist char:

#include <iostream> 
#include <limits> 

using namespace std; 

int main() 
{ 
    char userAnswer; 
    while (1 /*user is not closing the program*/) 
    { 
     cout << "Make a decision? (y/n) " << endl; 
     cin >> userAnswer; 
     cout << "entered: '" << userAnswer << "'\n"; 
     userAnswer = tolower(userAnswer); 
     if (userAnswer == 'y' || userAnswer == 'n') 
      break; 

     cout << "You may only type 'y' or 'n'.\n"; 
     cin.ignore(numeric_limits<streamsize>::max(), '\n'); 
    } 
} 
Verwandte Themen