Компилятор выбрасывает cout'ing из цикла - PullRequest
1 голос
/ 13 марта 2012

Я написал численное моделирование и, как твик, я хотел добавить базовый индикатор выполнения.В основном цикле я написал:

if(particles.t>=pr*maxtime){
   cout << "|";
   pr+=0.01;
 }

Где pr начинается с 0,01.Таким образом, в основном это должно было стоить "|"во время расчета.Вместо этого он раскладывает эти "|"в конце симуляции, все сразу.

И когда я изменяю этот код на:

if(particles.t>=pr*maxtime){
   cout << pr << "\n";
   pr+=0.01;
 }

, он работает как надо.Что-то делать с оптимизацией, я компилирую свой код, используя g ++, с опциями -Wall и -lm.Подобный код работал, когда я писал его на C # некоторое время назад.

Ответы [ 2 ]

4 голосов
/ 13 марта 2012

Проблема с буферизацией вывода. Поместите cout.flush(); после каждой печати, и проблема должна быть решена.

1 голос
/ 13 марта 2012

Записи в cout (и многие другие потоки) буферизируются.Если вы хотите сделать их сразу видимыми, вам нужно очистить поток:

if(particles.t>=pr*maxtime){
    cout << "|";
    cout.flush();
    pr+=0.01;
}
...