2017-01-07 3 views
0

Я пишу будильник в c, и я пытаюсь обновить строку текста без печати новой строки.обновить текст без печати новой строки c

#include <stdio.h> 
#include <time.h> 

int main(int argc, char *argv[]) 
{ 

    time_t timer; 
    char buffer[26]; 
    struct tm* tm_info; 
    void delay(unsigned int mseconds) 
    { 
    clock_t goal = mseconds + clock(); 
    while (goal > clock()); 
    } 


    while(1){ 
    time(&timer); 
    tm_info = localtime(&timer); 



    strftime(buffer, 26, "%Y-%m-%d %H:%M:%S", tm_info); 
    /*  puts(buffer);*/ 
    puts(buffer); 

    delay(1000); 
    } 
} 

Это напечатает время и дату и сохранит печать новых строк, есть ли способ, чтобы я мог обновить все на одной линии?

+0

Читать 'man puts': эта функция всегда добавляет новую строку в конец. Вы должны использовать 'fputs()'. – DyZ

+4

На некоторых терминалах «возврат каретки» (CR) или '\ r' переместит курсор к началу строки. Но он не будет работать повсюду. –

+2

Отличная возможность узнать об [escape-кодах ANSI] (https://en.wikipedia.org/wiki/ANSI_escape_code) – MateoConLechuga

ответ

1

Хотя есть несколько способов обновления в терминале, ANSI Escape Codes очень полезны для такого рода вещей. Примеры можно найти в нижней части страницы.

Кроме того, существует ncurses library, который обеспечивает гораздо большее разнообразие текстовых и терминальных манипуляций.

0

Чтобы не получить новую строку, используйте printf() вместо puts().

Чтобы очистить то, что печатается, вы можете сделать это после delay() функции, только до конца вашего цикла:

int length = (int)strlen(buffer); 
    for (int i = 0; i < length; i++) 
    { 
     buffer[i] ='\b'; 
    } 
    printf(buffer); 

Результат не очень, но это работает. Я получил эту идею от this question.

Смежные вопросы