2014-10-17 34 views
5

Ở đây tôi có một chương trình rất đơn giản:Làm thế nào để định vị con trỏ văn bản đầu vào trong C?

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

Bây giờ, tôi muốn đầu ra trông như thế này:

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

đâu, | * | là con trỏ nhấp nháy nơi người dùng nhập giá trị của họ.

Vì C là mã tuyến tính, nó sẽ không in hộp nghệ thuật, sau đó yêu cầu đầu ra, nó sẽ in hàng trên cùng và cột bên trái, sau đó sau khi đầu vào in hàng dưới cùng và cột bên phải.

Vì vậy, câu hỏi của tôi là, có thể tôi có thể in hộp đầu tiên, sau đó có một chức năng đưa con trỏ trở lại vào hộp?

+0

có thể là 'gotoxy() '? –

+0

@SouravGhosh Được rồi, Điều này có chuyển vị tương đối chứ không phải là tuyệt đối không? –

+1

Điều này là không thể trong tiêu chuẩn C99. Trên một số hệ điều hành, bạn có thể sử dụng một số thư viện như [ncurses] (http://www.gnu.org/software/ncurses/) hoặc [readline] (http://www.gnu.org/software/readline) –

Trả lời

13

Nếu bạn dưới một số thiết bị đầu cuối Unix (xterm, gnome-terminal ...), bạn có thể sử dụng mã console:

#include <stdio.h> 

#define clear() printf("\033[H\033[J") 
#define gotoxy(x,y) printf("\033[%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; 
} 

Hoặc sử dụng Box-drawing characters:

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

Thông tin thêm:

man console_codes 
2

Bản thân ngôn ngữ C không có bất kỳ khái niệm nào về màn hình có con trỏ. Bạn sẽ phải sử dụng một số loại thư viện cung cấp hỗ trợ này. là thư viện nổi tiếng và rộng rãi nhất dành cho điều khiển thiết bị đầu cuối.

6

Trong terminal linux bạn có thể sử dụng thiết bị đầu cuối lệnh để di chuyển con trỏ của bạn, chẳng hạn như

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

lệnh tương tự khác:

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

Hãy ghi nhớ rằng đây không phải là một giải pháp tiêu chuẩn hóa và do đó mã của bạn sẽ không độc lập với nền tảng.

+0

+1 Đây là một câu trả lời tuyệt vời, nó đã vượt lên trên và vượt ra ngoài bằng cách giải thích các lệnh khác có thể thay đổi con trỏ. Tôi nghĩ rằng đây sẽ là câu trả lời vì nó nhanh và ngắn nhưng hữu ích như thế nào. –

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