Функция 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 ответа:
Выходные данные обычно буферизуются и не выводятся до тех пор, пока буфер не будет заполнен или файл не будет закрыт. Тебе нужно это сделать.
flush
выход.cout << i << " " << std::flush;