【问题标题】:C++ setiosflags function manipulator - undetermined indentationC++ setiosflags 函数操纵器 - 未确定的缩进
【发布时间】:2020-07-10 13:48:56
【问题描述】:

我正在学习 C++,我专注于 cout 操纵器函数。

通过运行以下代码,我在包含Gauthier 的第二行中得到一个缩进。

#include <iostream>
#include <iomanip>

int main()
{
    std::cout << std::setw(10) << std::setiosflags(std::ios::left)
        << "Mathieu\n"
        << "Gauthier\n"
        << "Paul\n"
        << "Louis\n"
        << "Pierre\n"
        << std::endl;
    return 0;
}

有人可以向我解释发生了什么吗? 为什么Gauthier 是缩进的,而其他名称不是?

Mathieu
  Gauthier
Paul
Louis
Pierre

Program ended with exit code: 0

【问题讨论】:

标签: c++ indentation cout manipulators


【解决方案1】:

std::ios::left 告诉在右边添加填充字符,即它向第一个字符串添加几个字符,所以"Mathieu\n"“变成”"Mathieu\n "。末尾有换行符 ('\n'),因此添加的空格将移至下一行 (Gauthier)。所以这不是第二行的缩进,那些是第一行的尾随字符。

【讨论】:

  • 这是一个令人惊讶的答案(听起来还不错)。然而,我做了这个Test fiddling on coliru,我很难适应你的解释。
  • 如果这是真的,为什么不将空格添加到其他更短的名称中? (提示:我们认为setw() 是这里真正的关键)
  • std::cout &lt;&lt;std::setiosflags(std::ios::left) &lt;&lt; 43 ; 但输出与您的解释不符。
  • 更有趣:在每个输出行的开头使用std::setw(0) 重置不会改变结果:Further test fiddling on coliru
  • @cygien 您是否注意到std::ios::left 在我的第一次和第二次测试中产生了不同的效果? ;-) 不过,我也找到了对此的解释。
猜你喜欢
  • 1970-01-01
  • 2010-10-06
  • 2020-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多