С++ Підкажіть, як реалізувати, щоб користувач в консольному вікні мав змогу за допомогою стрілок на клавіатурі обирати пункт, який забажає. А при зміні пунктів змінювався колір надписей. Наприклад:
МЕНЮ
Ввести записи
Вивести записи
Розрахувати кількість введених записів
Вихід з програми
(пункти в string)
А надписи можуть бути зеленого(якщо користувач на цьому пункті) і червоного кольору (якщо не на цьому пункті) а консольне вікно білого кольору. Користувач за допомогою клавіш обирає бажаний варіант.
Також бажано додати стрілки, щоб було зображено на якому пункті стоїть користувач
Answers & Comments
Ответ:
Для реалізації цієї функціональності вам необхідно використовувати функції з бібліотеки "conio.h", яка надає доступ до консольного вводу-виводу в С++. Ось приклад коду, який можна використовувати:
Объяснение:
#include <iostream>
#include <conio.h>
#include <windows.h>
using namespace std;
int main()
{
const int MENU_SIZE = 4;
string menu[MENU_SIZE] = { "Ввести записи", "Вивести записи", "Розрахувати кількість введених записів", "Вихід з програми" };
int selectedMenuItem = 0;
int key;
// Встановлюємо курсор на початок консольного вікна
COORD cursorPosition = { 0, 0 };
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), cursorPosition);
// Надаємо фон білого кольору
system("color f0");
// Реалізуємо меню
while (true)
{
// Виводимо список пунктів меню
for (int i = 0; i < MENU_SIZE; i++)
{
if (i == selectedMenuItem)
{
// Якщо пункт вибрано, то надаємо йому зелений колір
cout << "\x1b[32m" << menu[i] << "\x1b[0m" << endl;
}
else
{
// Якщо пункт не вибрано, то надаємо йому червоний колір
cout << "\x1b[31m" << menu[i] << "\x1b[0m" << endl;
}
}
// Чекаємо на натискання клавіші
key = _getch();
// Обробляємо клавішу
if (key == 224)
{
// Якщо була натиснута стрілка, то читаємо наступний символ
key = _getch();
if (key == 72 && selectedMenuItem > 0)
{
// Стрілка вгору
selectedMenuItem--;
}
else if (key == 80 && selectedMenuItem < MENU_SIZE - 1)
{
// Стрілка вниз
selectedMenuItem++;
}
}
else if (key == 13)
{
// Якщо була натиснута клавіша Enter, то виходимо з циклу
break;
}
// Переміщуємо курсор на початок консольного вікна
cursorPosition.Y -= MENU_SIZE;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE