Обработка положения текстового курсора в C (под Linux)

Я пытаюсь перемещать текстовый курсор в верхний левый угол консоли в каждом кадре, чтобы получившийся квадрат отображался в том же положении.

#include <stdio.h>
#include <stdlib.h>

int main() {
    while(1) {
        printf("\u2554\u2550\u2550\u2550\u2557\n\u255A\u2550\u2550\u2550\u255D\n");
    }
}

Я обнаружил, что это возможно в Windows, если включить <windows.h>:

HANDLE hOut;
    COORD Position;
    hOut = GetStdHandle(STD_OUTPUT_HANDLE);
    Position.X = 0;
    Position.Y = 0;
    SetConsoleCursorPosition(hOut,Position);

Как я могу это сделать в Ubuntu?


person IMAD OUCHAIB    schedule 15.02.2021    source источник
comment
нет, как я могу это попробовать?   -  person IMAD OUCHAIB    schedule 15.02.2021
comment
В системах POSIX (например, Linux) я предлагаю вам поближе познакомиться с библиотекой ncurses.   -  person Some programmer dude    schedule 15.02.2021
comment
это может сделать работу, спасибо @xing   -  person IMAD OUCHAIB    schedule 15.02.2021
comment
Я посмотрю, спасибо @Someprogrammerdude   -  person IMAD OUCHAIB    schedule 15.02.2021


Ответы (2)


[обновление] К сожалению, я не заметил тега [C], и мой ответ относился только к командам оболочки.

Фактический ответ - использовать подобную curses библиотеку, например ncurses.

Например, обычно вам нужна функция move().


Оригинальный ответ:

В системах Unix перемещение курсора зависит от типа используемого вами терминала.

Существуют библиотеки, подобные ncurses, которые стремятся предоставить функциональные возможности, не зависящие от терминала. tput - это команда, которая использует ncurses, чтобы сделать некоторые возможности терминала (например, перемещение курсора) доступными для командной строки:

tput cup 0 0

поместит курсор в позицию (0,0) независимо от того, какой терминал вы используете (если такой терминал позволяет вам перемещать курсор)

person xhienne    schedule 15.02.2021

Напишите \033[H в консоль, и это поместит курсор в верхний левый угол терминала.

Для этого терминал должен быть совместимым с ANSI (например, терминал xterm или консоль linux)

В любом случае, я рекомендую вам использовать библиотеку ncurses, которая дает вам множество возможностей, помимо этого, и способом, не зависящим от типа терминала (так что он будет работать практически с любым известным типом терминала, например, терминалом hp)

person Luis Colorado    schedule 16.02.2021