我们在课堂上给出了一个任务,我们将创建一个程序来计算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”或?
答案 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]