Как удалить отображаемый текст из стандартного вывода?

Я создал макрос, который отображает текст, и после этого он сбрасывает стандартный вывод. Проблема заключается в том, как заставить очистить старый печатный текст, если текст длиннее, чем новый.

Пример. Если после этого я пытаюсь напечатать строку из 50 символов, мне нужно перезаписать весь текст и переписать текст из 25 символов. У меня все время часть первого текста всегда печатается, потому что второй короче.

Также мне нужно вставить \r в конце каждой строки, как добавить в мой макрос?

#include <stdio.h>
#include <string.h>
// I need to add "\r" to macro instead of to add it for all string
#define MESSAGE( fmt, args...) \
    do { setbuf(stdout, NULL); fprintf(stdout, fmt, ## args); fflush(stdout); sleep(5); } while (0)

int main()
{
    MESSAGE( "the application is started successfully\r");
    MESSAGE( "the application will be stopped soon\r");
    MESSAGE( "app stopped: ok\n\r");
    return 0;
}

Результат:

./test2
app stopped: ok will be stopped soonlly

Ожидаемый результат:

./test2
app stopped: ok

1 ответ

Решение

Это решение:

#include <stdio.h>
#include <string.h>

#define MESSAGE( fmt, args...) \
    do { fprintf(stdout, fmt, ## args); fprintf(stdout, "\r"); fflush(stdout); sleep(1); fprintf(stdout, "\x1b[2K"); } while (0)

int main()
{
    MESSAGE( "the application is started successfully");
    MESSAGE( "the application will be stopped soon");
    MESSAGE( "app stopped: ok");
    return 0;
}
Другие вопросы по тегам