Почему этот код не позиционирует курсор правильно, когда я собираю его с Borland C ++? - PullRequest
1 голос
/ 03 февраля 2012

Я нашел этот код для замены gotoxy() функции, используя только стандартную библиотеку C. по-видимому, он компилируется с использованием GCC и работает как gotoxy(), найденный в conio.h.

Однако у меня есть только компилятор Borland C ++ v5.5, он прекрасно компилируется, но не меняет положение курсора, как gotoxy() в conio.h. Кто-нибудь может проверить тот факт, что это работает при использовании GCC, или сказать мне, почему это не работает при использовании Borland?

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

void gotoxy(int x, int y)
{
    printf("%c[%d;%df", 0x1B, y, x);
}

int main()
{
    gotoxy(10, 10);
    printf("hello world");
}

Ответы [ 2 ]

5 голосов
/ 03 февраля 2012

Коды escape, используемые в вашей функции, зависят от наличия поддержки в вашем эмуляторе терминала.Это может или не может работать, в зависимости от среды, которую вы используете.Например, ваша программа работает должным образом в приложении терминала Mac OS X, которое запускает bash в режиме совместимости с xterm.

Вы можете прочитать о управляющих кодах ANSI для получения дополнительной информации об этом конкретном случае, которыйкоманда «HVP - Горизонтальное и вертикальное положение».

3 голосов
/ 03 февраля 2012

Этот код печатает escape-последовательность ANSI : <esc>[y;xf, поэтому будет работать только на терминале ANSI или эмуляторе терминала, который поддерживает коды ANSI.

Проблема не в GCC против BC ++, а в терминальном эмуляторе в стиле Unix , который поддерживает коды ANSI по сравнению с окном CMD .

РЕДАКТИРОВАТЬ: попробуйте изменить тело gotoxy() на следующее. Код escape в вашем примере перемещает курсор на предыдущую строку. Код, заканчивающийся на H, должен поместить курсор в запрошенную (Y, X) координату.

printf("%c[%d;%dH", 0x1B, y, x);

EDIT2: поскольку запрашивающий использует консоль Windows CMD, правильное решение заключается в использовании SetConsoleCursorPosition () . Экранирование ANSI не поддерживается или не полностью поддерживается в Win2k и более поздних версиях.

...