2012-02-03 5 views
1

C 표준 라이브러리만을 사용하여 gotoxy() 대체 코드를 찾았습니다. 분명히 그것은 GCC를 사용하여 컴파일하고 conio.h에서 찾을 수있는 gotoxy()처럼 작동합니다.왜이 코드는 볼랜드 C++로 빌드 할 때 커서를 올바르게 배치하지 않습니까?

그러나 저는 Borland C++ v5.5 컴파일러 만 가지고 있지만이 컴파일은 잘되지만 gotoxy()의 커서 위치를 바꾸지는 않습니다. conio.h 않습니다. 아무도 GCC를 사용할 때 이것이 작동한다는 사실을 확인하거나 볼랜드를 사용하지 않는 이유를 말해 줄 수 있습니까?

#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"); 
} 
+0

볼랜드는'conio.h '의 복사본에서'gotoxy()'함수를 사용할 수 있습니다. 왜 대체품이 필요한가요? –

답변

5

사용자의 기능에서 사용되는 이스케이프 코드는 터미널 에뮬레이터에있는 지원 여부에 따라 다릅니다. 사용중인 환경에 따라 작동 여부는 다를 수 있습니다. 예를 들어, xterm 호환 모드에서 bash를 실행하는 Mac OS X의 터미널 응용 프로그램에서 프로그램이 예상대로 작동합니다.

"HVP - 수평 및 수직 위치"명령 인이 특정 사례에 대한 자세한 내용은 ANSI escape codes을 참조하십시오.

+1

예를 들어 표준 출력이 프린터에 연결되어있는 경우 커서가 없어 커서의 위치를 ​​변경할 수 없습니다. 이것이하는 일은 당신이 보낸 터미널의 특성에 달려 있습니다. –

+0

대단한 대답, 덕분에 – user1083734

3

해당 코드는 ANSI escape sequence : <esc>[y;xf을 출력하므로 ANSI 터미널 또는 ANSI 코드를 지원하는 터미널 에뮬레이터에서만 작동합니다.

문제는 GCC와 BC++가 아니지만 ANSI 코드를 지원하는 unix-style terminal emulatorWindows CMD window 사이에서 실행됩니다.

EDIT : gotoxy()의 본문을 다음과 같이 변경해보십시오. 샘플의 이스케이프 코드는 커서를 이전 행으로 이동합니다. H로 끝나는 코드는 요청 된 (Y, X) 좌표에 커서를 놓아야합니다.

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

EDIT2가 : 아스 커는 Windows CMD 콘솔을 사용하기 때문에, 올바른 해결책은 SetConsoleCursorPosition()을 사용하는 것입니다. ANSI 이스케이프는 지원되지 않거나 Win2k 이상에서는 불완전하게 지원됩니다.

+0

이 시도 - 운이 안타깝게도, CMD – user1083734

+0

을 사용하고 있는데, ANSI 이스케이프가 아닌 SetConsoleCursorPosition()을 원한다. 링크에 대한 업데이트 된 답변을 참조하십시오. – ObscureRobot