听起来您的time
字符串中可能有回车符\r
。如果是这种情况,那么使用第一种方法输出仍将输出计数和分隔符,但\r
将返回到行首并开始覆盖它。
您的第二种方法不会覆盖计数,因为它位于前一行(\r
如果您已经在行首,则 a 几乎没有明显的效果)。
如果您在类似 UNIX 的平台上运行,您可以通过类似od -xcb
(十六进制转储过滤器)的管道输出来查看输出中是否有 a \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
,让自动冲洗自行处理。