Как разместить текстовый курсор ввода в C?

вот у меня очень простая программа:

 printf("Enter your number in the box belown");
 scanf("%d",&number);

теперь я хотел бы, чтобы результат выглядел так:

 Enter your number in the box below
 +-----------------+
 | |*|             |
 +-----------------+

Where, | * | - мигающий курсор, в котором пользователь вводит свое значение.

поскольку C-линейный код, он не будет печатать поле art, а затем запрашивать вывод, он будет печатать верхнюю строку и левый столбец, а затем после ввода печатать нижнюю строку и правый столбец.

Итак, мой вопрос в том, Могу ли я сначала распечатать коробку, затем есть функция вернуть курсор обратно в поле?

3 ответов


если вы находитесь под некоторым терминалом Unix (xterm, gnome-terminal ...), вы можете использовать коды консоли:

#include <stdio.h>

#define clear() printf("3[H3[J")
#define gotoxy(x,y) printf("3[%d;%dH", (x), (y))

int main(void)
{
    int number;

    clear();
    printf(
        "Enter your number in the box below\n"
        "+-----------------+\n"
        "|                 |\n"
        "+-----------------+\n"
    );
    gotoxy(3, 2);
    scanf("%d", &number);
    return 0;
}

или через Box-рисование символов:

printf(
    "Enter your number in the box below\n"
    "╔═════════════════╗\n"
    "║                 ║\n"
    "╚═════════════════╝\n"
);

Подробнее:

man console_codes

в терминале linux вы можете использовать команды терминала для перемещения курсора, например

printf("3[8;5Hhello"); // Move to (8, 5) and output hello

другое похожие команды:

printf("3[XA"); // Move up X lines;
printf("3[XB"); // Move down X lines;
printf("3[XC"); // Move right X column;
printf("3[XD"); // Move left X column;
printf("3[2J"); // Clear screen

имейте в виду, что это не стандартизированное решение, и поэтому ваш код не будет независимым от платформы.


сам язык C не имеет никакого понятия о экране с курсором. Вам придется использовать какую-то библиотеку, которая обеспечивает эту поддержку. проклятие самая известная и широко доступная библиотека для терминального управления.