Реализовать меню с использованием стрелок - C (СИ)

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

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

Помогите транслировать код из Паскаль в Си. Попросту говоря, это обычное меню с использованием стрелок.
program projectX;
uses crt;
CONST    
m:array[1..3] of string=('Show the task',
                         'Start calculations',
                         'Exit');  
VAR
  i,x,y,menuItem:integer;
  c:char;   
 
 x:=30; y:=10;
  menuItem:=1;
  repeat
    clrscr;
    for i:=1 to 3 do
    begin
      gotoXY(x,y+i);
      if i=menuItem then
      begin
        textColor(0);
        textBackGround(15);
      end
        else
        begin
        textColor(15);
        textBackGround(0);
        end;
    write(m[i]);
    end;
    c:=readkey;
    case c of
    #72: if menuItem=1 then
         menuItem:=3
         else dec(menuItem);
    #80: if menuItem=3 then
         menuItem:=1
         else inc(menuItem);
    #13: case menuItem of
         1: ShowTask;
         2: Calc;
         3: break;
         end;
    end;
    until c=#27;
END.

Решение задачи: «Реализовать меню с использованием стрелок»

textual
Листинг программы
#include <stdio.h>
#include <windows.h>
 
void gotoxy(int x, int y) {
    COORD coord = {x, y};
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}
 
void textcolor(short f, short b) {
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), f | (b << 4));
}
 
char getch() {
    HANDLE hstdin = GetStdHandle(STD_INPUT_HANDLE);
    INPUT_RECORD rec;
    DWORD event;
 
    FlushConsoleInputBuffer(hstdin);
    while (ReadConsoleInputA(hstdin, &rec, 1, &event)) {
        if ((rec.EventType == KEY_EVENT)
            && (rec.Event.KeyEvent.bKeyDown)) {
            return rec.Event.KeyEvent.wVirtualKeyCode;
        }
    }
    return EOF;
}
 
int menu(int x, int y, const char* items[], int cnt) {
    const short COLOR_FG = 7;
    const short COLOR_BG = 0;
 
    int i;
    char ch;
 
    textcolor(COLOR_FG, COLOR_BG);
    for (i = 0; i < cnt; ++i) {
        gotoxy(x, y + i);
        printf("%s", items[i]);
    }
    i = 0;
    gotoxy(x, y); textcolor(COLOR_BG, COLOR_FG);
    printf("%s", items[i]);
 
    while (((ch = getch()) != EOF) && (ch != VK_RETURN)) {
        gotoxy(x, y + i); textcolor(COLOR_FG, COLOR_BG);
        printf("%s", items[i]);
        switch (ch) {
            case VK_ESCAPE:
                return 0;
            case VK_UP:
                i = (i == 0) ? (cnt - 1) : (i - 1);
                break;
            case VK_DOWN:
                i = (i == cnt - 1) ? 0 : (i + 1);
                break;
        }
        gotoxy(x, y + i); textcolor(COLOR_BG, COLOR_FG);
        printf("%s", items[i]);
    }
    textcolor(COLOR_FG, COLOR_BG);
 
    return i + 1;
}
 
int main() {
    const char* items[] = {"Show the task",
                           "Start calculations",
                           "Exit"};
 
    int i = menu(3, 3, items, 3);
 
    gotoxy(3, 7);
    printf("Return: %d\n\n", i);
    system("pause");
 
    return 0;
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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