Я хочу показать printf только на 5 секунд - PullRequest
0 голосов
/ 08 ноября 2019

Я хочу показать "printf" в команде только в течение 5 секунд, я не нахожу его в сети. Большое спасибо, если вы нашли время, чтобы ответить ученику, как я! (КОНСОЛЬ КЛИОНА)

int main()
{
srand(time(NULL));
int a=0;
int b=0;
int c=0;
int d=0;
int e=0;

int ar=0;
int br=0;
int cr=0;
int dr=0;
int er=0;

a=rand()%1000+1;
b=rand()%1000+1;
c=rand()%1000+1;
d=rand()%1000+1;
e=rand()%1000+1;

printf("La suite à rentenir est :\n%d %d %d %d %d\n",a,b,c,d,e); <---- The printf I only want to show during 5 seconds  


scanf("%d",&ar);
scanf("%d",&br);
scanf("%d",&cr);
scanf("%d",&dr);
scanf("%d",&er);

if (ar==a && br==b && cr==c && dr==d && er==e)
    printf("BRAVO");
        else
            printf("TU AS PERDU");

return 0;

}

"

1 Ответ

2 голосов
/ 08 ноября 2019

В приведенном ниже коде «сообщение» печатается, а затем стирается

#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;
}    

. Это уточнение означает, что независимо от длины сообщения будет напечатано правильное количество пробелов для его удаления.

...