2017-01-07 3 views
0

Ich schreibe einen Wecker in c und ich versuche, eine Textzeile zu aktualisieren, ohne eine neue Zeile zu drucken.Text aktualisieren, ohne eine neue Zeile zu drucken 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); 
    } 
} 

Dies wird die Zeit und das Datum drucken und drucken neue Zeilen gibt es eine Möglichkeit, ich könnte alles auf der gleichen Linie aktualisieren?

+0

Lesen 'man puts': Diese Funktion fügt am Ende immer eine neue Zeile hinzu. Sie sollten 'fputs()' verwenden. – DyZ

+4

Bei einigen Terminals bewegt der "Wagenrücklauf" (CR) oder "\ r" den Cursor zum Anfang der Zeile. Aber es wird nicht überall funktionieren. –

+2

Perfekte Gelegenheit, mehr über [ANSI-Escape-Codes] zu erfahren (https://en.wikipedia.org/wiki/ANSI_escape_code) – MateoConLechuga

Antwort

1

Obwohl es mehrere Möglichkeiten gibt, innerhalb eines Terminals zu aktualisieren, sind ANSI Escape Codes sehr nützlich für diese Art von Sache. Beispiele finden Sie am unteren Ende der Seite.

Darüber hinaus gibt es die ncurses library, die eine viel größere Vielfalt von Text- und Terminalmanipulation bietet.

0

Um keine neue Zeile zu erhalten, verwenden Sie printf() anstelle von puts().

zu löschen, was gedruckt wird, können Sie dies tun, nachdem Ihre delay() Funktion, kurz vor dem Ende der Schleife:

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

Das Ergebnis ist nicht schön, aber es funktioniert. Ich habe diese Idee von this question.

Verwandte Themen