1

Тема: Навігація стрілками в консолі

Давно цікавився як організувати перехід між пунктами меню за допомогою стрілок, і нещодавно наткнувся на такий код в інтернеті:

#include "pch.h"
#include <stdio.h>
#include <iostream>
#include <conio.h>
#include <stdlib.h>
#include <Windows.h>

#define BUFFERSIZE 72

int getPosition(void) {

    static int result = 0;
    static int count = 0;

    if (count) {
        int ch = _getch();
        if (ch == 0 || ch == 0xE0)
            ch = _getch() << 8;

        switch (ch) {
        case 0x5000:
            if (result < 8 && result >= 0) result++;
            break;
        case 0x4800:
            if (result > 0 && result <= 8) result--;
            break;
        case 0x0D: {//додав кейс для натиску ентера
            break;
        }
        default:
            puts("Incorrect input!");
            break;
        }
    }

    count++;
    return result;
}

int main() {

    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    char string[BUFFERSIZE][BUFFERSIZE] = {
        " 1. Сортувати дані.",
        " 2. Додати нові записи до бази даних.",
        " 3. Редагувати існуючий запис.",
        " 4. Видалити існуючий запис.",
        " 5. Переглянути вміст бінарного файлу.",
        " 6. Операції згідно з варіантом.",
        " 7. Пошук товарів.",
        " 8. Перезапис файлу з .txt в .bin.",
        " 9. Завершити роботу."
    };
    char pointStart[BUFFERSIZE] = ">>";
    char pointFinish[BUFFERSIZE] = "  ";
    unsigned row = 0, col = 0, i = 100;
    int choice = 0, c;
 
    do {

        choice = getPosition();
        system("cls");
        for (row = 0; row < 9; row++)
            printf("%s %s\n",
                row == choice ? pointStart : pointFinish,
                string[row]);
    } while (i--);
    return 0;
}

Спробував реалізувати його в курсовій роботі, але він досить складний і максимум, що я зміг з ним зробити це застосувати його
тільки до головного меню програми. В інеті мало інфи на цю тему та й в коледжі нема кого спитати, тому цікаво чи знає хтось простіші варіанти написання цього алгоритму, якщо цей не є найкращим?

2

Re: Навігація стрілками в консолі

А старий добрий ansi у віндовсах вже не тойво?
^[[A стрілка вгору
^[[B вниз
^[[C вправо
^[[D вліво
(Ctrl-[ то ESC)

Кажуть у 10-тій є, але треба увімкнути
https://docs.microsoft.com/en-us/window … dfrom=MSDN

3

Re: Навігація стрілками в консолі

#include <conio.h>