С перемещением курсора в начало текущей строки - PullRequest
8 голосов
/ 05 марта 2010

Я хочу напечатать текущее время (используя printf) в том же месте, но я хочу сделать это в бесконечном цикле, например:

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

. Поэтому, прежде чем использовать printf, я должен переместить курсор назад в исходное положение. Как это сделать?

спасибо заранее

Ответы [ 4 ]

8 голосов
/ 05 марта 2010

Чтобы просто переместить курсор в начало текущей строки, вы можете вывести «\ r», что и делает. Обратите внимание, что он не стирает старый текст, поэтому будьте осторожны, чтобы перезаписать его или очистить с помощью кода ANSI.

В системах, использующих управляющие коды ANSI / VT, вы можете напечатать «\ 033 [1; 2H» для позиционирования курсора. Он будет перемещать курсор и ничего не печатать на экране. Значения 1 и 2 - это строка и столбец, поэтому измените их, чтобы использовать разные позиции.

Есть и другие коды для цветов и прочего: http://bluesock.org/~willg/dev/ansi.html

Обратите внимание, что ни один из этих кодов не является переносимым и может работать не на всех системах (в частности, они не работают по умолчанию в некоторых системах Microsoft). Неподдерживающие системы вместо этого будут отображать на экране некоторое количество мусора (сам код).

6 голосов
/ 05 марта 2010

написать \ r

while(1) {
 printf("\rDate and Time are %s      ", asctime(localtime(&current)) );
 fflush(stdout);
}
3 голосов
/ 05 марта 2010

Вы могли бы сделать это так (посмотрите на \ r с множеством пробелов!):

while(1) {
   printf("Date and Time are %s\r         ", asctime(localtime(&current)));
   fflush(stdout); 
} 
0 голосов
/ 05 марта 2010

Возможно, будет напечатано "\ r" в начале строки.

...