C++中如何多行输出cout

5
我希望能够使用cout在c++中打印一个大型消息。
例如:
cout<<"Camera could not be opened in the requested access mode, because another
              application (possibly on another host) is using the camera."<<endl;

但是我遇到了一个错误。 需要帮助吗?

4
什么是错误? - Arun
如果这是一个错误信息,应该将其发送到cerr而不是cout - Emmet
2个回答

14

像这样的东西:

 cout<<"Camera could not be opened in the requested access mode, because another "
          "application (possibly on another host) is using the camera."<<endl;
或者
 cout<<"Camera could not be opened in the requested access mode, because another\n"
          "application (possibly on another host) is using the camera."<<endl;

在 C 和 C++ 中,相邻的两个字符串会被编译器连接起来。


1
请将以下与编程有关的内容从英语翻译为中文。只返回翻译文本:原始版本也应该能够正常工作(可能会有一些多余的空格)。 - M.M
@MattMcNabb:真的吗?当我在字符串中间有一个换行符时,g++和clang++都会出现问题。不确定你使用的是哪个编译器... - Mats Petersson
1
你需要在结尾处加上一个 \ 才能使其正常工作,就像多行宏一样,如果不使用额外的引号。额外的引号通常更易读且更可取。 - Retired Ninja
@RetiredNinja:那也可以,但这样很难阅读且容易出错。我经常使用“...”“....”跨多行发送长文本消息,这通常在屏幕上的格式也很好。我不认为我曾经在这种情况下使用过反斜杠。除了节省一个字符之外(但现在磁盘空间相对便宜),还有什么好处呢? - Mats Petersson
我的错,我想的是带反斜杠的版本。C++11允许没有反斜杠的“原始”字符串字面量,但这不是其中之一。 - M.M
显示剩余2条评论

2

您无法直接跨多行拆分普通字符串字面量。我认为您可以使用连接字符将它们拆分成多行。然而,这也不能嵌入换行符。如果要获取这些内容,您需要使用\n。不过,我认为您可以使用原始字符串字面量:

char const* strcont = "foo\
bar";
char const* strcat = "foo"
                     "bar";
char const* strraw = R"(foo
bar)";

第一和第二个字符串相同:相邻的字符串被连接在一起。第三个字符串包含一个换行符。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接