在文本文件中打印矩阵

时间:2015-09-03 16:57:24

标签: c++ gnuplot fstream

我想用gnuplot绘制3D图(x,y,z)。

为了做到这一点,我想到在C ++中使用fstream将文本文件写入文本文件,然后根据this post使用splot获取数据矩阵的3D图。

假设这是正确的方法,文本文件中的数据应如下所示:

       x[1]    x[2]      x[3] 
y[1] z[1][1]  z[1][2]   z[1][2]
y[2] z[2][1]  z[1][2]   z[2][3]
y[3] z[3][1]  z[3][2]   z[3][3]

为了获得矩阵,我编写了以下代码:

fstream myfile;
myfile.open("example.txt",fstream::out);

//rows
for (int j=0; j< 3;j++)
{
  myfile << x[j]<< std::endl;
}

//columns
for (int i=0; i< 3;i++)
{
  myfile << y[i]<< std::endl;
}

//columns
for (int i=1; i< 3;i++)
{
  //rows
  for (int j=1; j< 3;j++)
  {
    myfile << z[i][j] << std::endl;
  }
}

myfile.close();

我以这种方式将所有内容都放在一列中,所以问题是如何打印矩阵?

2 个答案:

答案 0 :(得分:3)

这样的事情应该有效,(我假设您需要在矩阵的每个元素之间使用制表符,如果需要,请输入逗号)

fstream myfile;

myfile.open("example.txt",fstream::out);

for (int j=0; j< 3;j++)// Prints row of x
{        
    myfile << x[j]<< "\t";  
}

myfile<< std::endl;

for (int i=0; i< 3;i++) //This variable is for each row below the x 
{        
    myfile << y[i]<< "\t";

    for (int j=0; j<3;j++)
    {                      
        myfile << z[i][j] << "\t";
    }
    myfile<<std::endl;
}
myfile.close();

答案 1 :(得分:0)

如果我没有弄错,你的循环定义不是很明确,你应该知道std :: endl会跳转到一个新行,这就是你获得1列的原因。 试试:

for (int j=0; j< 3;j++){
    myfile << x[j] <<"\t";  
}

myfile<< std::endl;

for(int j=0 ; j<3 ; j++){
    myfile << y[j]<<"\t";
    for(int i=0;i<3;i++)
        myfile << z[j]x[i]<<"\t";
    myfile<< std::endl;
}