Site hosted by Angelfire.com: Build your free website today!
 

 


 
 


 


Как реализовать меню

Логика меню такова:
(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'ем команде.

 

 

Заглавна Форум Компилатори за C++