2012-03-13 195 views
1

我寫了一個數值模擬,作爲一個調整,我想添加一些基本的進度條。 在主循環中我寫道:編譯器拋出錯誤

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#編寫時就起作用了。

+0

@jal:它會改變可觀察行爲,他看到的問題是緩衝,而不是優化。 – PlasmaHH 2012-03-13 09:22:12

+0

是的,我沒有正確閱讀代碼。我的錯。 :) – jalf 2012-03-13 09:29:46

回答

4

問題出在緩衝輸出。每次打印後放置cout.flush();,問題應該解決。

+0

這是,謝謝:) – gumol 2012-03-13 09:21:57

+0

@gumol如果它工作,那麼你可能需要接受它作爲答案 – Jeeva 2012-03-13 09:25:06

+1

請注意,沖洗流也是**慢**。這就是爲什麼它默認被緩衝。 :)因此,取決於它的完成頻率,你的「調整」可能會大大減慢你的模擬 – jalf 2012-03-13 09:29:24

1

cout(和許多其他流)的寫入被緩衝。如果你想讓它們立即可見,你需要刷新流:

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

謝謝,它的工作原理。 – gumol 2012-03-13 09:22:48

相關問題