我想打印存储在单个字符串中的项目列表。我不知道为什么最后一个项目被跳过!
您知道为什么吗?
#include <iostream>
#include <string>
int main() {
std::string string_test{"Item1\nItem2\nItem3"};
std::cout << string_test;
return 0;
}
输出为:
Item1
Item2
答案 0 :(得分:2)
这是QNX版本7.0.3上行缓冲流输出中的一个已报告的错误。
答案 1 :(得分:1)
在POSIX 2017下,不需要使用C ++实现在程序终止 1 时刷新程序的标准输出。你的不是。您需要手动执行此操作:
#include <iostream>
#include <string>
int main()
{
std::string string_test{"Item1\nItem2\nItem3"};
std::cout << string_test << std::flush;
}
1)
The Open Group Base Specifications Issue 7, 2018 edition
按照ISO C标准的要求,使用从
main()
返回的行为与使用返回值调用exit()
的行为(对于语言范围问题除外)具有相同的行为。到达main()
函数的末尾与调用exit(0)
的行为相同。[...]
_Exit()
和_exit()
函数不得调用向atexit()
注册的函数或任何已注册的信号处理程序。 [Option Start] (开放选项) [选项结束] 由实现定义是否关闭打开的流(不刷新)。最后,呼叫过程将终止,并产生以下所述的后果。
答案 2 :(得分:1)
如果您可以使用std::cerr
而不是std::cout
,则在std::cerr
上刷新是自动的
#include <iostream>
#include <string>
int main()
{
std::string string_test{"Item1\nItem2\nItem3"};
std::cerr << string_test;
return 0;
}