В Linux сначала выполняется цикл for с пустым телом. странное поведение

сначала я использовал этот код:

void pause(long n)
{
  clock_t at=clock();
  while(clock()-at<=n)
    ;    
}

int main()
{
  cout<<1;
  pause(100000);
  cout<<2;
}

что вы ожидаете? вывод будет 1 (некоторый промежуток времени) 2, верно? НЕТ..!! его (какой-то промежуток времени)12 как?? В любом случае, я изменил функцию паузы следующим образом:

void pause(long n)
{
  for(long i=1; i<=n*n; i++)
    ;
}

Все то же самое..!! почему этот пустой цикл выполняется первым?? но если я сделаю это

  void pause(long n)
  {
   for(long i=1; i<=n*n; i++)
     cout<<0  ;
  }

Теперь он с радостью выполняет вывод как 10000000000....(много нулей)....00002


person Isharth Rastogi    schedule 06.11.2016    source источник
comment
cout << 1; не очищает выходной буфер. Попробуйте добавить cout << std::flush;. Или cout.flush()   -  person Captain Giraffe    schedule 06.11.2016


Ответы (1)


Вы забыли, что cout тоже буферизованный поток. Если вы хотите сразу увидеть 1 и 2, вам нужно вызвать flush

cout.flush()

or

cout << flush;

Обратите внимание, что std::endl также неявно вызывает flush

person Oleg Bogdanov    schedule 06.11.2016