2017-01-07 7 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입니다.

관련 문제