我尝试使用开关做一个简单的菜单。我还想检查用户是否输入了有效的输入(仅从1到4的整数)。输入-4或44可以很好地进行此检查。但是,如果我输入类似“w”的内容,则会给我一个无限循环。
我猜测我需要另一个if / else if(!cin)blabla else继续进行切换。
但是我不知道我该怎么做,否则其他人会开始转换。

 int menu() {
        int enter;
        bool exit = false;
        do {
            cout << "Wie soll angefangen werden: " << endl; //Enter your choice
            cout << "1 - Spiel starten" << endl; // do game();
            cout << "2 - Highscore " << endl; //do score();
            cout << "3 - Quiz starten " << endl; //do quiz();
            cout << "4 - Ende " << endl; //end the programm

        cin >> enter;

        switch (enter) {
            case 1:
                game();
                break;
            case 2:
                score();
                break;
            case 3:
                showQuizDialog();
                break;
            case 4:
                exit = true;
                break;
            default:
                cout << "Keine gültige Eingabe, nochmal: " << endl; //invalid input, again
                void flushCin();
        } //end of switch
    } while (exit == false);

}//end of menu();

最佳答案

这是因为输入试图获取整数。当输入不是整数时,输入将保留在缓冲区中,因此下次在循环中,相同的输入仍然存在。

同样,您在默认情况下没有调用flushCin函数,而是在声明它。您可能要删除void关键字。我猜这是对的吗? (即调用 std::cin.ignore() std::cin::clear() 。)

10-01 07:42
查看更多