我们在课堂上被布置了一个作业,在那里我们将创建一个程序来计算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”还是?
您所展示的示例在宽度为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]