文字列にtimeキャリッジリターンが含まれている可能性があります\r。その場合、最初の方法を使用して出力すると、カウントと区切り文字が出力され\rますが、は行の先頭に戻り、上書きを開始します。
2番目のメソッドは、前の行にあるため、カウントを上書きしません(\rすでに行の先頭にいる場合は、目に見える効果はほとんどありません)。
UNIXライクなプラットフォームで実行している場合は、出力をod -xcb(16進ダンプフィルター)のようなものにパイプして、出力にが含まれているかどうかを確認でき\rます。
または、コードに文字列がある場合は、次のようなキャリッジリターンが含まれているかどうかを確認できます。
std::string s = "whatever";
size_t pos = s.find ('\r');
if (pos != std::string::npos) {
// carriage return was found.
}
例として、次のプログラム:
#include <iostream>
int main (void) {
std::string s1 = "strA";
std::string s2 = "\rstrB";
std::string s3 = "strC";
std::cout << s1 << '|' << s2 << '|' << s3 << '\n';
std::cout << "=====\n";
std::cout << s1 << '|' << '\n';
std::cout << s2 << '|' << s3 << '\n';
std::cout << "=====\n";
size_t pos = s2.find ('\r');
if (pos != std::string::npos)
std::cout << "CR found at " << pos << '\n';
return 0;
}
次のように出力されます。
strB|strC
=====
strA|
strB|strC
=====
CR found at 0
しかし実際には、最初の行は実際には次のとおりです。
strA|(\r)strB|strC
(\r)キャリッジリターンはどこにありますか。
そして、あなたがめったに必要としないことを覚えておいてくださいendl-それは事実上、\nほとんどの場合実際には必要ではないフラッシュを備えています。使用\nをやめて、自動フラッシングで処理することができます。