2010-03-05 44 views
8

Tôi muốn in thời điểm hiện tại (bằng cách sử dụng printf) trong cùng một nơi, nhưng tôi muốn làm điều đó trong vòng lặp vô hạn ví dụ:C di chuyển con trỏ đến đầu dòng hiện

while(1) {printf("Date and Time are %s", asctime(localtime(&current))); } 

. Vì vậy, trước khi tôi sử dụng printf tôi nên di chuyển con trỏ lùi về vị trí nhìn chằm chằm của nó. Làm thế nào để làm nó ?

thx trước

Trả lời

0

Nó có thể hoạt động để in "\ r" ở đầu dòng.

6

viết một \ r

while(1) { 
printf("\rDate and Time are %s  ", asctime(localtime(&current))); 
fflush(stdout); 
} 
+0

Vâng, tôi đã thử và nó hoạt động. – ardsrk

3

Bạn có thể làm điều đó như thế này (nhìn vào \ r với nhiều không gian!):

while(1) { 
    printf("Date and Time are %s\r   ", asctime(localtime(&current))); 
    fflush(stdout); 
} 
6

Đối với chỉ đơn giản là di chuyển con trỏ đến đầu của dòng hiện tại, bạn có thể in "\ r", chỉ thực hiện điều đó. Lưu ý rằng nó không xóa văn bản cũ, vì vậy hãy cẩn thận để ghi đè lên nó hoặc để xóa bằng mã ANSI.

Trên các hệ thống sử dụng mã kiểm soát ANSI/VT, bạn có thể in "\ 033 [1; 2H" để định vị con trỏ. Nó sẽ di chuyển con trỏ và sẽ không in bất cứ thứ gì trên màn hình. Các giá trị 1 và 2 là hàng và cột, vì vậy hãy thay đổi chúng để sử dụng các vị trí khác nhau.

Ngoài ra còn có các mã khác cho màu sắc và những thứ khác: http://bluesock.org/~willg/dev/ansi.html

Chú ý rằng không ai trong số các mã được xách tay và họ có thể không hoạt động trên tất cả các hệ (đáng chú ý nhất mà họ không làm việc theo mặc định trên một số hệ thống Microsoft). Thay vào đó, các hệ thống không hỗ trợ sẽ hiển thị một số rác trên màn hình (chính mã đó).

+0

Câu trả lời hay, kỹ lưỡng hơn những người khác. – Josh

+0

Bạn có biết cách tăng số hàng trong vòng lặp ví dụ: cho (i = 1; i <10; i ++) {printf ("\ 033 [i; 1H văn bản trong hàng% d, i); } (nó không hoạt động, vì vậy tôi nên thoát 'i'? hoặc có thể là một cách khác để làm điều đó? ? – JosiP

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