Функция c++ sleep() работает не так, как ожидалось


Коллеги! Я попытался использовать функцию sleep() в своем коде вместе с функцией system(). Код должен выводить на экран первое сообщение, а затем отсчитывать время, каждый раз распечатывая количество оставшихся секунд и ожидая 1 секунду. Затем экран должен быть очищен. Я хочу сделать только простую текстовую анимацию. Но программа работает не так, как ожидалось! Я проверил свой код, и похоже, что у меня нет синтаксической или логической ошибки. Когда я компилирую и запускаю этот код, сначала он ждет пять секунд, а затем распечатывает сообщение stdout, даже не дожидаясь, и немедленно очищает экран. Я думаю, что это ошибка времени выполнения, хотя это не должно логически произойти. Если следующая информация актуальна, я компилирую и запускаю свои программы на языке C++ с терминала Linux.

#include <iostream>
#include <cstdlib>   // includes system();
#include <unistd.h>  // includes sleep();
using std::cout;
using std::cin;
using std::endl;

int main() {
  cout << "Clearing the screen in: ";
  for (int i = 5; i > 0; i--) {
    cout << i << " ";
    sleep(1);  // takes seconds
  }
  system("clear");

  return 0;
}
2 2

2 ответа:

Выходные данные обычно буферизуются и не выводятся до тех пор, пока буфер не будет заполнен или файл не будет закрыт. Тебе нужно это сделать.flush выход.

cout << i << " " << std::flush;

cout буферизуется так, что он сохраняет промежуточные вещи, которые вы печатаете, и печатает их все сразу, когда он смывает.

Вы можете либо добавить << std::endl; к строке, которая выводит i, либо иным способом очистить буфер вручную.