Навигация по меню с помощью клавиш - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Появился вопрос,как сделать в си чтобы в консольном окне( В черненьком)) ) по меню можно было двигаться с помощью нажатых клавиш вверх и вниз,с соответствующим цветом на котором остановились Чтобы например как в ниже примере надо было не выбирать пункт нажатием 1 или 2..... или 6 чтоб выйти а двигаться

с помощью стрелок вверх и вниз по меню

соответственно не будет тогда строки ваш вариант,просто нужный например пункт выбрал и нажал ентер и выполняется например если на 2 остановились нажали ентер там идет дальще вычисление
#include <stdio.h>
#include <conio.h>
 
int main()
{
    int a;
    while(true)
    {
    printf("1.Sozdat");
        printf("\n2.Dobavit");
            printf("\n3.Udalit");
                printf("\n4.Naiti");
                    printf("\n5.Zapisat v fail");
                        printf("\n6.Exit");
    printf("\n\nVash variant: ");
    scanf("%i",&a);
    if(a==1)
    {
        //  код какой нить
            }
    //.....................
    if(a==6)
    {
            break;
            }
    }
    return 0;
}
Как это реализовать? надеюсь поняли что я хотел спросить

Решение задачи: «Навигация по меню с помощью клавиш»

textual
Листинг программы
#include <windows.h>
#include <stdio.h>
 
void ShowMenu(int iItem)
{
    system("cls");
    printf("%s1 - 1-st item\n",iItem == 1 ? ">" : " ");
    printf("%s2 - 2-nd item\n",iItem == 2 ? ">" : " ");
    printf("%s3 - 3-rd item\n",iItem == 3 ? ">" : " ");
    printf("%s4 - 4-th item\n",iItem == 4 ? ">" : " ");
    printf("%s5 - 5-th item\n",iItem == 5 ? ">" : " ");
}
 
int main()
{
    int iItem = 1;//Отвечает какой пункт меню активен в данный момент
    int nLast = 5;//Отвечает какой индекс у последнего пункта меню
    ShowMenu(iItem);
    while(TRUE)
    {
        if(GetAsyncKeyState(VK_UP))
        {
            keybd_event(VK_UP, 0, KEYEVENTF_KEYUP, 0);//Отжимаем кнопку
            if(0 < iItem - 1)
                iItem = iItem - 1;
            else
                iItem = nLast;
            ShowMenu(iItem);
        }
        if(GetAsyncKeyState(VK_DOWN))
        {
            keybd_event(VK_DOWN, 0, KEYEVENTF_KEYUP, 0);//Отжимаем кнопку
            if(iItem < nLast)
                iItem = iItem + 1;
            else
                iItem = 1;
            ShowMenu(iItem);
        }
        if(GetAsyncKeyState(VK_RETURN))
        {
            keybd_event(VK_DOWN, 0, KEYEVENTF_KEYUP, 0);//Отжимаем кнопку
            ShowMenu(iItem);
            switch(iItem)
            {
            case 1:
                printf("Run 1-st item of menu\n");
                break;
            case 2:
                printf("Run 2-nd item of menu\n");
                break;
            case 3:
                printf("Run 3-rd item of menu\n");
                break;
            case 4:
                printf("Run 4-th item of menu\n");
                break;
            case 5:
                printf("Run 5-th item of menu\n");
                break;
            }
        }
    }
    return 0;
}

Объяснение кода листинга программы

  1. Программа включает два заголовочных файла: и .
  2. Функция ShowMenu() выводит на экран меню с пятью пунктами.
  3. Переменная iItem отвечает за выбор текущего пункта меню, а nLast — за последний пункт меню.
  4. В основном цикле программы с помощью функций GetAsyncKeyState() и keybd_event() обрабатываются нажатия клавиш вверх и вниз.
  5. Если нажата клавиша вверх, то текущий пункт меню делается неактивным и выбирается предыдущий пункт меню или, если его нет, то последний пункт меню.
  6. Если нажата клавиша вниз, то текущий пункт меню делается неактивным и выбирается следующий пункт меню или, если его нет, то первый пункт меню.
  7. Если нажата клавиша Enter, то выполняется соответствующий пункт меню:
    • При выборе первого пункта меню выводится сообщение Run 1-st item of menu.
    • При выборе второго пункта меню выводится сообщение Run 2-nd item of menu.
    • При выборе третьего пункта меню выводится сообщение Run 3-rd item of menu.
    • При выборе четвёртого пункта меню выводится сообщение Run 4-th item of menu.
    • При выборе пятого пункта меню выводится сообщение Run 5-th item of menu.

Оцени полезность:

14   голосов , оценка 4 из 5
Похожие ответы