gpt4 book ai didi

c++ - cout 部分打印没有 endl

转载 作者:行者123 更新时间:2023-11-30 00:37:29 26 4
gpt4 key购买 nike

我正在打印一堆字符串,如下所示:

cout<<count<<"|"<<newTime.time<<"|"<<newCat<<"|"<<newCon<<endl;

其中count是一个计数器,newTime.time是一串时间,newCat和newCon都是字符串。输出如下:

06:02:11:20:08|DB Mgr|Sending query: “SELECT * FROM users” 

显然,它遗漏了计数和“|”。但是,如果我将代码更改为

cout<<count<<"|"<<endl;
cout<<newTime.time<<"|"<<newCat<<"|"<<newCon<<endl;

刚才的输出变成了

2|
06:02:11:20:08|DB Mgr|Sending query: “SELECT * FROM users”

我一开始以为是不是buffer的问题。我将 endl 更改为 flush 但问题仍然存在。感谢您的帮助。

最佳答案

听起来您的time 字符串可能有一个回车符\r。如果是这种情况,那么使用您的第一种方法输出将输出计数和分隔符,但 \r 将返回到行的开头并开始覆盖它。

你的第二种方法不会覆盖计数,因为它在上一行(如果你已经在行的开头,\r 几乎看不到效果)。

如果您在类 UNIX 平台上运行,您可以通过类似 od -xcb(十六进制转储过滤器)的管道输出来查看是否有 \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 并让自动刷新自行处理。

关于c++ - cout 部分打印没有 endl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13246204/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com