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

时间:2016-09-09 07:14:29

标签: c++ matrix

我们在课堂上给出了一个任务,我们将创建一个程序来计算9个值并将它们存储在3x3矩阵中。然而,老师强调不使用制表来对齐矩阵中的对象。

矩阵应该看起来像:

[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 个答案:

答案 0 :(得分:1)

您显示的示例(大部分)是宽度为8的字段中的浮点数 - 每个数字正好是8个字符宽(尽管第一个字符始终是空格,第二个字符是空格或减号)。

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

操纵器是可以输出到流(例如cout)的对象,它可以更改该流的格式。

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

您可能还需要使用setw操纵器:

答案 1 :(得分:0)

天真的解决方案(但在几秒钟内写完):

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]