C++ 格式对齐的问题

图片描述

使用了std::setw(3),但是值的位数影响了格式,
怎么对称,,,,,,,,,
总不能判断值的位数来确定补白的位数,这样太麻烦了

for (size_t i = 1; i <= c.Rows; ++i)
{
    for (size_t j = 1; j <= c.Rows; ++j)
    {
        switch (i-j)
        {
        case 1:case 0:case -1:
        {
            if (j == 1)
                os << c.element[i - 1];
            else
                os << c.element[2*j+i-3];
        }
        break;
        default: os << "0";
        }
        if (!(j % c.Rows))
            os << std::endl;
        else
            os << std::setw(3);
    }
}
阅读 2.8k
2 个回答

1.setw只对<<后的第一个操作数有效。
2.设置的宽度是总宽度,并不是空格数。

setw()只对其后面紧跟的输出产生作用,不足的用空格填充。若输入的内容超过setw()设置的长度,则按实际长度输出。
应当在每次输出数值前设置一次
例如

        if (j == 1)
            os << std::setw(3) << c.element[i - 1];
        else
            os << std::setw(3) << c.element[2*j+i-3];

总之所有数值输出前,要设置一次

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题