编译器将 cout'ing 抛出循环

Compiler throws cout'ing out of loop

本文关键字:ing 循环 cout 编译器      更新时间:2023-10-16

我写了一个数值模拟,作为一个调整,我想添加一些基本的进度条。在主循环中,我写道:

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#编写这样的代码时,它是有效的。

问题在于输出的缓冲。每次打印后放置cout.flush();,问题应得到解决。

cout(以及许多其他流)的写入是缓冲的。如果你想让它们立即可见,你需要刷新流:

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