2010-03-05 43 views
8

的開始,我想打印當前時間(通過用printf)在同一個地方,但我想這樣做在無限循環如:C中的光標移動到當前行

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

。所以在我使用printf之前,我應該將光標向後移動到它的凝視位置。怎麼做 ?

THX提前

回答

0

也許工作在該行開始打印「\ r」。

6

寫\ r

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

是的,我試過了,它的工作原理。 – ardsrk 2010-03-05 13:22:06

3

你可以做這樣的(看很多空格\ r!):

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

對於只需將光標移動到的開始當前行,你可以打印「\ r」,這就是那個。請注意,它不會擦除舊文本,因此要小心覆蓋它或用ANSI代碼清除。

在使用ANSI/VT控制代碼的系統上,可以打印「\ 033 [1; 2H」來定位光標。它會移動光標,不會在屏幕上打印任何內容。值1和2是行和列,所以更改它們以使用不同的位置。

也有對顏色和其他事情其他代碼:http://bluesock.org/~willg/dev/ansi.html

注意到沒有這些代碼是便攜式的,他們可能無法在所有的系統工作(最明顯的是他們不默認情況下,一些微軟系統工作)。不支持的系統將在屏幕上顯示一些垃圾(代碼本身)。

+0

偉大的答案,比其他更徹底。 – Josh 2010-03-05 13:50:20

+0

您是否知道如何增加循環中的行數:例如: (它是(i = 1; i <10; i ++){printf(「\ 033 [i; 1H text in row%d,i); }不工作,所以我應該escpae'我'?或者也許它的另一種方式來做到這一點? ? – JosiP 2010-03-09 13:16:05