2017-01-07 11 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

[ANSIエスケープコード](https://en.wikipedia.org/wiki/ANSI_escape_code) – MateoConLechuga

答えて

1

端末内で更新する方法は複数ありますが、ANSI Escape Codesは非常に便利です。例はページの下部にあります。

さらに、より多くの種類のテキストおよび端末操作を提供するncurses libraryが存在します。

0

新しい行を取得しない場合は、puts()の代わりにprintf()を使用してください。

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

結果はきれいではありませんが、それは動作します:

は、あなたは自分のループの終了前に、あなたの delay()関数の後にこれを行うことができ、印刷されたものをオフにします。私はその考えを this questionから得ました。

関連する問題