文字列に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
をやめて、自動フラッシングで処理することができます。