| |
Как реализовать меню
Логика меню такова:
(1) выводится меню возможных действий, одно из которых выход из
программы. У каждого действия номер (1,2,3 ..)
(2) Ожидается нажатие пользователем клавиши
(3) Если был нажат один из номеров действий, то выполняется действие.
Если действия с таким номером нет, то выдается сообщение, что пользователь
ошибся.
(4) Возвращаемся на (1)
Очевидно, это цикл. Считать одну клавишу удобно с помощью функции
getch() из conio.h.
Проверять какая клавиша была нажата можно обычными if'ами, но лучше
использовать оператор switch().
#include <conio.h>
#include <stdio.h>
#define DA 1
#define NET 0
void main(void){
int bPoraNaVyhod= NET;
char *lpszMenu="Have something to drink:\n\n1. Vodka\n2. Beer\n3.
Vodka + Beer\n4. nothing (quit)";
while(!bPoraNaVyhod){
puts(lpszMenu);
switch(getch()){
case '1': puts("vodka will be ready in 5 min"); break;
case '2': puts("beer is on the way"); break;
case '3': puts("mayby Baltika №9 ?"); break;
case '4': bPoraNaVyhod = DA;break;
default: puts("Valid choices are : 1,2,3 or 4");
}
} // конец while
}
Как ты помнишь, оператор while проверяет
передаваемое ему значение на истинность и выполняет цикл, пока выражение
является истиной. Также напомню, что истина в Си это число, не равное
нулю. Ложь - это ноль. Над логическими значениями можно производить
опять же логические операции. Одну из них я здесь задействовал.
Это отрицание - «логическое не». Записывается, как восклицательный
знак. Она превращает истину в ложь, а ложь в истину. :-))
Вначале я заношу в bPoraNaVyhod ноль (ложь). Для красоты я определил
значения истина и ложь как DA и NET.
Выражение while(!bPoraNaVyhod) читается так «Пока не bPoraNaVyhod
выполняем …» и далее идет тело цикла.
В цикле выводится меню и ожидается нажатие клавиши. Код нажатой
клавиши передается в оператору switch.
Логика его работы проста. Он проверяет равно ли переданное ему значение
какому-либо из case'ов. Если равно, то выполняются следующие за
ним команды, пока не встретится оператор break. Если ни одному не
равна и есть вариант default, то выполняются команды после default'а.
Если нет default'а, то передается управление следующей за switch'ем
команде.
       

|
|