В приведенном ниже коде «сообщение» печатается, а затем стирается
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
int main()
{
printf("message"); fflush(stdout);
sleep(5);
printf("\r \r"); fflush(stdout);
return 0;
}
обратите внимание, что в зависимости от того, какую систему вы используете для sleep
, библиотека изменяется. В Windows я думаю, что это windows.h
вместо unistd.h
.
. Ключевая часть, которая заставляет его работать, - это escape-код \r
, который возвращает курсор в начало строки. Я вставил это дважды в коде. Сначала, чтобы пустые места закрывали сообщение. Второй раз, чтобы курсор оставался в начале строки, готовой к следующему шагу.
Обратите внимание, что обычно в C вещи не печатаются с printf
, пока мы не получим символ новой строки, который является\n
. В этой программе мы решаем эту проблему с помощью fflush(stdout)
, которая заставляет все печататься на экране немедленно, не ожидая \n
. Конечно, нам здесь не нужна новая строка, потому что мы хотим остаться на той же строке, чтобы мы могли вернуться к началу строки и переписать «сообщение» пустыми символами.
Это принцип того, как это сделать .....
Поскольку ваш код вставлен в вопрос ...
printf("La suite à rentenir est :\n");
printf("%d %d %d %d %d",a,b,c,d,e); fflush(stdout);
//<---- The printf I only want to show during 5 seconds
sleep(5);
printf("\r \r"); fflush(stdout);
Это будет означать, чтопомните серию номеров (La suite à rentenir) только в течение пяти секунд.
Отличным предложением в комментариях @chux является уточнение для измерения длины напечатанного текста, а затем печати пробелов по длине. Код - int len = printf("message"); .... printf("\r%*s\r", len, "");
. После добавления приведенный выше пример кода становится
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
int main()
{
int len = printf("message: hello world"); fflush(stdout);
sleep(5);
printf("\r%*s\r", len, "");
return 0;
}
. Это уточнение означает, что независимо от длины сообщения будет напечатано правильное количество пробелов для его удаления.