C++ 在 while 循环期间不打印到控制台,仅在循环完成后

C++ not printing to console during while loop, only after loop is finished

提问人:Harvey Wilkinson 提问时间:4/14/2021 更新时间:7/3/2022 访问量:601

问:

背景
我目前正在为一个基于 M.E.N.A.C.E 的 naughts and crosses 机器学习程序编写一些代码,我已经完成了实际机器学习和与计算机对战的代码,以及另一台计算机与它玩游戏以训练它。用户可以输入他们希望让计算机自行训练,然后输入要玩的游戏数量。

问题:
我正在尝试制作一个完成百分比显示,该显示在每次更新时都会覆盖自身。我遇到的问题是,由于某种原因,代码不会打印任何应该在 while 循环期间打印的内容,而是等到最后一次性打印所有内容。我正在使用“\r”(回车符)来覆盖最后打印的文本。如果我删除回车符,while 循环会像它应该做的那样在每次迭代中打印文本。我不知道是什么原因导致了这个问题,因为我对C++很陌生。

我正在 Repl.it 中编程,因为我无法在我正在使用的计算机上安装 IDE。

下面是用于计算和显示完成百分比的子例程(使用命名空间 std)。

void calcCompletion(int a, int b)
{
  int completion = (static_cast<float>(a)/b) * 100;
  cout << '\r';
  cout << completion << "%";
}

这是调用该过程的 while 循环的开始(当我测试它时,mode 始终为 2)。

while(gamesPlayed < gameEnd)
  {
  //permutations();
  if(mode != "1")
  {
    calcCompletion(gamesPlayed, gameEnd);
  }

这是一个很长的 while 循环,所以我不会展示整个内容(因此为什么大括号不匹配)。

这是输出:

 clang++-7 -pthread -std=c++17 -o main ai.cpp base3.cpp main.cpp otherai.cpp permutations.cpp winCheck.cpp
 ./main
Enter mode. 
1 - Play the AI 
2 - Train the AI
2
How many games would you like the AI to play?
5

Simulating...
80%
Games complete.
Games played: 5
Games won: 1
Games lost: 0
Games drawn: 4
Win Percentage: 20%
Loss Percentage: 0%
--------------

它只是等到完成 while 循环,然后打印最后一个数字,而不是边走边打印。

我已经测试过尝试在另一个代码中无时间延迟地覆盖我编写的内容,它工作正常,所以很明显被覆盖得太快不是问题。

c++ while-loop iostream cout 回车

评论

5赞 Some programmer dude 4/14/2021
输出到是缓冲的。如果要强制输出,则需要刷新它。std::cout
0赞 Harvey Wilkinson 4/14/2021
@Someprogrammerdude您能稍微详细说明一下它是如何工作的或如何实现它吗?正如我所说,我对C++很陌生
1赞 Some programmer dude 4/14/2021
我希望您的初学者书籍或教程应该提到 I/O 操纵器吗?如果它没有提到刷新流所需的特定流,则查看链接引用中的列表。

答:

0赞 Virat 7/3/2022 #1

您尚未关闭 while 循环下的 (if 子句) 的大括号

评论

0赞 Harvey Wilkinson 7/5/2022
我做到了,这不是屏幕截图中循环的全部内容,只是 IF 语句。