Нужно сделать меню в консольке. Помогите пожалуйста
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.
Нужно получить что-то типо вот такого(1):
(1)
// при нажатии 1 запрашивается пароль, это я уже сделал. Проблема вот в чем. После проверки пароля появляется следующая менюшка(2):
(2)
// если мы тут выбираем какой-то из пунктов то после выполнения операции должна быть возможность вернуться назад. Проблема заключается в том что я не знаю, как это сделать... чтобы можно было не ограниченное количество раз возвращаться в главное меню... По моему надо как-то зациклить... (но это лишь мои догадки, без малейшей доли представления о том как это сделать)
Помогите пожалуйста))
Думаю так сойдет. Там немножко доработать надо и все, можно юзать.
При желании можно еще сделать чтобы надписи были цветными и фон поменять.
Пароль: 11.
Спасибо большое))
Никогда, честно говоря, не заморачивался по поводу разветвлённых меню в консольных программах, но задачка показалась занимательной. После некоторых раздумий появилось следующее решение:
Выполнено в «сишном» стиле, никакого ООП и прочих заморочек... но как прототип — потянет.
Смотреть в первую очередь структуру
menu_item
и функциюmenu()
. Остальное — обвязка.Структура содержит указатель на «строку» меню (без номера пункта) и указатель на функцию, которая будет вызвана при выборе пункта меню. Функция, вызываемая из меню, имеет прототип
void funcname(void)
. Если в структуре указатель на функцию равен NULL, то такой пункт меню будет помечен как 0 и предназначен для окончания работы меню. Структуры собираются в массив, который, собственно, и представляет собой меню.Функция
menu()
в качестве параметров получает массив структурmenu_item
и размер массива. Функция в бесконечном цикле (1) выводит на экран пункты меню, (2) запрашивает у пользователя номер пункта меню с примитивной обработкой ошибок, (3) проверяет: если введён 0, то прерывает цикл и выходит из функции, (4) запускает на выполнение функцию, соответствующую выбранному пункту меню.Как можно видеть из приведённой программы, вложенные меню (см. функцию
f2()
), тоже легко реализуются.