提问者:小点点

如何更改矩阵中字段的方面?


我们在课堂上被布置了一个作业,在那里我们将创建一个程序来计算9个值,并将它们存储在一个3×3矩阵中。然而,老师强调不用跳转来对齐矩阵中的对象。

矩阵应该看起来像:

[0.0000,  0.9211, -0.3894,
 0.0000,  0.0000,  0.0000,
 0.0000,  0.0000,  0.0000]

(第一个[应在行首)

“每打印一个字段,字段宽度应该是8(我不明白他这么说是什么意思),输出应该使用固定的操纵器。”是指示。

老师还没有讨论数组,所以我假设我们应该只使用cout,但是在这里,我该如何使它在间距方面发挥作用呢?我能在cout<<里放8个空格吗;“在此处插入8个空格”(<<);“0.0000”还是?


共2个答案

匿名用户

您所展示的示例在宽度为8的字段中有(大部分)浮点数--每个数字正好有8个字符宽(尽管第一个字符总是空格,第二个字符要么是空格,要么是减号)。

例外是第一列似乎位于宽度为6的字段中,如果打印小于零或大于等于10的数字,对齐方式将中断。

操纵器是可以输出到流(如

有关操纵器的详细信息,请参见:

您可能还需要使用操作器:

匿名用户

简单的解决方案(但是用秒写的):

使用iomanip中的setw()

#include <iostream>
#include <iomanip>
using namespace std;

#define MTXDIM  3

float mtx[MTXDIM][MTXDIM]=
    {
        {0.0000, 0.9211, -0.3894},
        {0.0000, 0.0000, 0.0000},
        {0.0000, 0.0000, 0.0000}
    };

int main() 
{
    cout<<"[";
    for(int i=0;i<MTXDIM;i++)
    {
        for(int j=0;j<MTXDIM;j++)
        {
            cout << fixed << (!(i+j) ? setw(7) : setw(8)) << right << setprecision(4) << mtx[i][j];
            if(i==MTXDIM-1 && j==MTXDIM-1) cout<<"]";
            else cout<<",";
        }
        cout<<endl;
    }

    return 0;
}

输出:

[ 0.0000,  0.9211, -0.3894,
  0.0000,  0.0000,  0.0000,
  0.0000,  0.0000,  0.0000]