要するに
最後に改行を入れないと、 coutで問題が発生します。
詳細に
(例: ) に を追加するか、次の命令を使用して cout の「即時出力」を有効endl
にします(最初に改行する必要はありません)。cout
std::cout << data << std::endl
std::cout << std::unitbuf;
完全な例:
std::cout << std::unitbuf;
std::cout << data;
// ... a lot of code later ...
std::cout << "it still works";
補足: 名前が示すように、これは出力バッファリングに関係していunitbuf
ます (ここで実際に何が起こっているかを調べたい場合)。
このようにして、現在の行を書き換えることもできます。これは、これが必要な場合の良い例です;-)
実用例
using namespace std;
cout << "I'm about to calculate some great stuff!" << endl;
cout << unitbuf;
for (int x=0; x<=100; x++)
{
cout << "\r" << x << " percent finished!";
// Calculate great stuff here
// ...
sleep(100); // or just pretend, and rest a little ;-)
}
cout << endl << "Finished calculating awesome stuff!" << endl;
備考:
- \r (改行) はカーソルを行の最初の位置に置きます (改行なし)
- 前に書いた行に短いテキストを書く場合は、最後にスペース文字で上書きしてください
プロセスのどこかに出力します。
I'm about to calculate some great stuff!
45 percent finished!
..そしてしばらくして:
I'm about to calculate some great stuff!
100 percent finished!
Finished calculating awesome stuff!