Warum repariert cin.clear () eine Endlosschleife, die durch eine schlechte Eingabe in cin verursacht wird?

Ich habe eine switch-Anweisung geschrieben und eine Standardeinstellung erstellt, die einfach besagt, dass der Benutzer eine schlechte Option ausgewählt und die Eingabe wiederholt hat. Ich wollte sicherstellen, dass bei einem Problem zuerst der Puffer gelöscht wird, also habe ich cin.sync () verwendet. Die Eingabe eines 'a' für die Eingabe verursachte jedoch immer noch eine Endlosschleife. Ich habe cin.clear () hinzugefügt, um die Flags zu löschen, die mir den Arbeitscode gaben ... aber meine Verwirrung ist, warum es funktioniert hat. Funktioniert cin.sync () nicht, wenn ein Fehlerflag vorhanden ist?

die Aussage folgt, der Kürze halber abgeschnitten:

while(exitAllow == false)
{
    cout<<"Your options are:\n";
    cout<<"1: Display Inventory\n";
    /*truncated*/
    cout<<"5: Exit\n";
    cout<<"What would you like to do? ";

    cin.clear();   //HERE IS MY CONFUSION//
    cin.sync();
    cin>>action;
    switch(action)
    {
        case 1:
                    /*truncated*/
        case 5:
            exitAllow = true;
            break;
        default:
            cout<<"\ninvalid entry!\n";
            break;
    }
}

Antworten auf die Frage(1)

Ihre Antwort auf die Frage