std::cout不';t在QNX中\n之后打印字母



我想打印存储在单个字符串中的项目列表。我不知道为什么跳过最后一项!

你知道为什么吗?

#include <iostream>
#include <string>
int main() {
std::string string_test{"Item1nItem2nItem3"};
std::cout << string_test;
return 0;
}

输出为:

Item1
Item2

这是QNX 7.0.3版本上的行缓冲流输出中报告的一个错误。

在POSIX 2017下,C++实现不需要在程序终止时刷新程序的标准输出1。你的没有。你需要手动操作:

#include <iostream>
#include <string>
int main()
{
std::string string_test{"Item1nItem2nItem3"};
std::cout << string_test << std::flush;
}

1)

开放式群组基础规范2018年第7期

根据ISO C标准的要求,使用来自main()的返回与使用返回值调用exit()具有相同的行为(除了语言范围问题)。到达main()函数的末尾具有与调用exit(0)相同的行为。

[…]

_Exit()_exit()函数不应调用在atexit()中注册的函数,也不应调用任何注册的信号处理程序[选项启动]不得冲洗开放流[Option End]打开的流是否关闭(不冲洗)由实现定义。最后,调用过程应终止,其后果如下所述。

如果可以使用std::cerr而不是std::cout,则在std::cerr上,刷新是自动

#include <iostream>
#include <string>
int main()
{
std::string string_test{"Item1nItem2nItem3"};
std::cerr << string_test;
return 0;
}

最新更新