【问题标题】:How to add newline and concatenation in ternary conditional operator ? : in c++如何在三元条件运算符中添加换行符和连接? : 在 C++ 中
【发布时间】:2020-01-06 09:06:00
【问题描述】:

我想用三元条件运算符重写这段代码? : 在 c++ 中,但我不能添加新行(这里用 endl 表示)或连接空字符串

if (n % 10 == 0) {cout << n << endl;}
else {cout << n << " ";}

什么时候使用这个代码

cout << (n % 10 == 0 ? n + "\n" : n + " ");

它不会产生正确的输出 如果我将 10 分配给 n,它会产生“@”(不带双引号),如果我将 11 分配给 n,它会产生“,@”

【问题讨论】:

  • 但是为什么呢?第一个代码更具可读性。
  • 问题不在于三元,而是添加字符串文字。我想知道如何编译它而不会收到一些警告

标签: c++ conditional-operator


【解决方案1】:

要扩展 acraig5075 的答案(C++ 没有 operator+ 将字符串连接到整数,尽管它可以写出来),可以

cout &lt;&lt; n &lt;&lt; (n % 10 == 0 ? "\n" : " ");

使它更清晰,它打印 n,然后是空格或换行,具体取决于 n 的值。

【讨论】:

  • 虽然我真的很想这样做,但它没有。 std::endl" " 没有共同的类型。也许"\n"
  • 我收到此错误“无法确定函数模板“std::endl”的哪个实例是预期的”
  • 我没有尝试编译它是我的错,将我的答案中的 endl 替换为“\n”。
【解决方案2】:

您不能将字符串文字添加到整数。您应该首先构建所需的输出字符串,例如,使用std::to_string

改变

cout << (n % 10 == 0 ? n + "\n" : n + " ");

cout << (n % 10 == 0 ? std::to_string(n) + "\n" : std::to_string(n) + " ");

【讨论】:

  • 或 cout
  • @UriRaz 同意,无限好,让它成为答案,我会投票!
【解决方案3】:
cout << n << (n % 10 ? " ": endl);  // if remainder is not zero put " "

【讨论】:

  • 添加上下文以防止机器人标记和删除。 (LQ 后审查结束)。
猜你喜欢
  • 2013-07-13
  • 1970-01-01
  • 2010-10-20
  • 1970-01-01
  • 1970-01-01
  • 2020-01-30
  • 2020-01-10
  • 2016-10-27
  • 2021-11-28
相关资源
最近更新 更多