2011-12-30 25 views
12

tôi đang tìm kiếm một sự thay thế của gotoxy() cho trình biên dịch gcc và thấy điều này -gotoxy() thực hiện cho Linux sử dụng printf

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

Tôi muốn biết làm thế nào là nó hoạt động, ý tôi là khi nào chúng ta sử dụng [; bên trong printf, những gì là 0x1B làm ở đó và làm thế nào để nó đưa con trỏ đến hàng/cột với mã này?

Tôi chưa bao giờ thấy loại thực hành này cho printf trong sách, vì vậy nó sẽ tuyệt vời Nếu bạn có thể chỉ cho tôi liên kết nơi tôi có thể tìm thấy về cách sử dụng printf đó.

+1

Có vẻ như không bình thường khi sử dụng '% c' để định dạng hằng số. Sau đây sẽ là tương đương: 'printf (" \ x1b [% d;% df ", y, x);' –

+0

Yea, phổ biến cũng là ''\ 033''. Nếu tôi sử dụng '% c' format specifier, tôi sẽ viết nó là' 27' - cái mà tôi biết rõ là ESC (a.k.a. 'Ctrl- [' hoặc '^ ['). –

Trả lời

7

Điều này đang sử dụng terminal escape codes để định vị con trỏ.

"\x1B" là các ký tự thoát mà nói với thiết bị đầu cuối của bạn rằng những gì xảy ra tiếp theo không có nghĩa là để được in trên màn hình, mà là một lệnh đến thiết bị đầu cuối (hoặc mô phỏng thiết bị có khả năng nhất)

Các trailing 'F' chỉ ra rằng bạn muốn ép buộc vị trí con trỏ ở đâu đó, được chỉ ra bởi các tọa độ đứng trước nó.

Force Cursor Position <ESC>[{ROW};{COLUMN}f 

Vì vậy, nếu bạn gọi gotoxy(4,2), nó kết thúc gửi dãy thoát "(ESC)[2;4f" nơi ESC là byte 0x1B.

+0

Cảm ơn Jonathon! Nó thực sự hữu ích và dễ hiểu. –

+1

Niềm vui của tôi. Gần đây tôi đã phải làm rất nhiều giải thích về các trình tự thoát này vì vậy nó ngay lập tức bị mắc kẹt với tôi. –

+0

Nhân tiện - hãy cẩn thận với kỹ thuật này. Nó phụ thuộc nhiều vào loại thiết bị đầu cuối trong đó chương trình chạy. Không phải tất cả các trình giả lập thiết bị đầu cuối đều có cùng ý nghĩa với các chuỗi như thế này. – ash

3

Chúng được gọi là ANSI Escape Sequences và có nguồn gốc từ các thiết bị đầu cuối hiển thị DEC VT100 mà đã được giới thiệu vào năm 1978.

1

Đó được gọi là một mã ANSI thoát. Tôi đã không nhìn thấy những người được sử dụng trong một thời gian. Đây là trang giải thích về chúng:

http://en.wikipedia.org/wiki/ANSI_escape_code

Các vấn đề liên quan