Невозможно повторно получить доступ к внутреннему меню (при l oop и переключении) - PullRequest
0 голосов
/ 01 августа 2020

У меня есть следующий воспроизводимый пример:

#include <string>
#include <iostream>
using namespace std;

int main()
{
    int choice;
    bool run = true;
    char inner_choice;
    bool inner_run = true;
    
    while(run != false)
    {
        cout << "Pick a selection" << endl;
        cout << "1) Case 1" << endl;
        cout << "2) Case 2" << endl;
        cout << "3) Case 3" << endl;
        cout << "4) Quit" << endl;
        cout << "Enter your choice: ";
        cin >> choice;
        
        switch(choice)
        {
            case 1: cout << "Inside case 1" << endl;
                    break;
            case 2: cout << "Inside case 2" << endl;
                    break;
            case 3: cout << "Select inner menu" << endl;
                    cout << "a) Inner case a" << endl;
                    cout << "b) Inner case b" << endl;
                    
                    while(inner_run != false)
                    {
                        cout << "q) q to go back main menu" << endl;
                        cin >> inner_choice;
                        
                        switch(inner_choice)
                        {
                            case 'a': cout << "Inside inner case a" << endl;
                                        break;
                            case 'b': cout << "Inside inner case b" << endl;
                                        break;
                            case 'q': cout << "Going back" << endl;
                                        inner_run = false;
                                        break;
                                        cin.clear();
                        }
                    }
                    break;
            case 4: cout << "Terminate" << endl;
                    run = false;
                    break;
        }
    }
    
    return 0;
}

Проблема в том, что когда я выбираю 3 в первый раз, он отображает вариант, позволяющий мне выбрать внутреннее меню. Когда я выбираю от q до go обратно в главное меню, а затем снова обращаюсь к 3, возможность выбора внутреннего меню пропадает.

Я думал, что это могло быть из-за cin поток все еще имеет ввод, поэтому я поместил cin.clear (), но проблема не устранена.

Есть предложения?

1 Ответ

1 голос
/ 01 августа 2020

Вы выполнили inner_run = false; при вводе q, и после этого inner_run нигде не устанавливается на true. Это предотвратит ввод выбора для внутреннего меню.

Для исправления вы должны установить inner_run на true перед l oop, например:

                    inner_run = true; // add this
                    while(inner_run != false)
                    {
...