Как создать интерактивное подменю на C++?

Отщеплен от топика Как создать меню на C++?

Часом ли не подскажете, как сделать второе меню, скажем так в case 1?

Помести в case 1 вызов функции int prompt_menu_item() и будет тебе радость.

beginner, не думаю, что будет все так шоколадно )))

На скорую руку можно предложить следующую схему:

#include <iostream>
#include <iomanip>

using namespace std;


struct menuitem
{
    int item;
    const char *text;
};


menuitem menu1[] =
{
    { 1, "просмотреть содержимое" },
    { 2, "найти минимальный объект" },
    { 3, "найти максимальный объект" },
    { 4, "отсортировать" },
    { 5, "найти среднее кол-во элементов" },
    { 6, "дополнить таблицу" }
};

menuitem menu11[] =
{
    { 1, "просмотреть по возрастанию" },
    { 2, "просмотреть по убыванию" },
    { 3, "просмотреть рандомно ;-)" },
};

int show_menu(const menuitem *m, int max_item)
{
    for (int i = 0; i < max_item; i++)
    {
        cout << setw(4) << m[i].item << ". " << m[i].text << endl;
    }
    cout << setw(4) << 0 << ". выйти" << endl;

    int variant;
    cout << ">>> ";
    cin >> variant;
    return variant;
}


int main()
{
    setlocale(LC_ALL, ".1251");

    int variant, variant11;

    do
    {
        variant = show_menu(menu1, 6);
        switch (variant)
        {
        case 1:
            cout << "Просматриваем содержимое..." << endl;
            do
            {
                variant11 = show_menu(menu11, 3);
                switch (variant11)
                {
                case 1:
                    cout << "...по возрастанию" << endl;
                    break;
                case 2:
                    cout << "...просмотреть по убыванию" << endl;
                    break;
                case 3:
                    cout << "...просмотреть рандомно" << endl;
                    break;
                case 0:
                    break;
                default:
                    cerr << "Вы выбрали неверный вариант" << endl;
                }
            } while (variant11 != 0);
            break;
        case 2:
            cout << "Находим минимальный элемент..." << endl;
            break;
        case 3:
            cout << "Находим максимальный элемент..." << endl;
            break;
        case 4:
            cout << "Сортируем..." << endl;
            break;
        case 5:
            cout << "Находим среднее количество элементов..." << endl;
            break;
        case 6:
            cout << "Дополняем таблицу..." << endl;
            break;
        case 0:
            break;
        default:
            cerr << "Вы выбрали неверный вариант" << endl;
        }
    } while (variant != 0);

    cout << "Выход из программы..." << endl;
    return 0;
}

А еще лучше в структуру пункта меню добавить указатель на функцию. Тогда можно будет обойтись без монстроидальных вложенных свичей.

А если номера пунктов некритичны, то их можно не хранить в структуре, а использовать счетчик цикла функции show_menu. Тогда, кстати, проще сделать проверку на ошибку ввода номера пункта меню.

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

Пожалуйста, оформляйте исходный код в соответствии с правилами разметки. Для того, чтобы вставить код в комментарий, скопируйте его в текстовое поле ниже, после чего выделите то, что скопировали и нажмите кнопку «код» в панели инструментов. Иначе ваш код может принять нечитаемый вид.

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.