Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何将文件中的值输入矩阵?_C++_Arrays_Matrix - Fatal编程技术网

C++ 如何将文件中的值输入矩阵?

C++ 如何将文件中的值输入矩阵?,c++,arrays,matrix,C++,Arrays,Matrix,我希望使用函数将特定值输入矩阵,但由于matInit函数中存在一些错误,我一直收到分段错误。无论是将其设置为bar.col[I].els[k]=0(如下所示),还是将bar.col[I]保存为数组并使用k值执行for循环,我都会收到此错误。我觉得分割错误是因为维度不匹配,但我不知道我做错了什么。我还必须通过结构输入值,因为这是本项目的要求 #include <iostream> #include <cmath> #include <fstream> using

我希望使用函数将特定值输入矩阵,但由于matInit函数中存在一些错误,我一直收到分段错误。无论是将其设置为bar.col[I].els[k]=0(如下所示),还是将bar.col[I]保存为数组并使用k值执行for循环,我都会收到此错误。我觉得分割错误是因为维度不匹配,但我不知道我做错了什么。我还必须通过结构输入值,因为这是本项目的要求

#include <iostream>
#include <cmath>
#include <fstream>
using namespace std;

struct Vector {
  float* els;  
  int len;
};

struct Matrix {
  Vector* col; 
  int ncols;    // total number of columns in matrix
};

// Initializer functions for our structures
Vector vecInit(int);     // Provided below
Matrix matInit(int,int); // ** You must complete this

// Overloaded operators
Vector operator+(Vector,Vector);  // Provided below
Vector operator*(float,Vector);   // ** You must write this 
Vector operator*(Matrix,Vector);  // ** You must write this
istream& operator>>(istream&, Vector&); // Provided below
istream& operator>>(istream&, Matrix&); // ** You must write this

// Other Vector functions
float vecDot(Vector,Vector); // ** You must write this

//    main code 
// **** This must be left unchanged in your submission *****
int main(void) {
  int m,n,nv,nw;
  ifstream fin("mat.def");

  if (!fin.is_open()) {
    cout << "Cannot find file mat.def!" << endl;
  }
  else {
   // Load details of matrix M from file
    fin >> m >> n;
    Matrix M = matInit(m,n);
fin >> M;
cout << "M is " << m << "x" << n << endl;



  }

  return 0;

}
// *****************************************************

//    Support function definitions 

// ** Provided Code.  Do not change **

// Vector structure initializer

// *** Partially provided code.  Change as needed below ***

//     Matrix structure initializer
    Matrix matInit(int m, int n) {
  Matrix bar;

bar.ncols = n;
bar.col = new Vector[m];  



for (int i=0;i<n;i++) {

for (int k=0;k<m;k++) {
bar.col[i].els[k]=0;
}
}







  return bar;

}


istream& operator>>(istream& input, Matrix& M) {
int leng=M.col[0].len;


for (int i=0;i<M.ncols;i++) {
for (int k=0;k<leng;k++) {

input >> M.col[i].els[k];
}
}
  return input;
}
#包括
#包括
#包括
使用名称空间std;
结构向量{
浮动*els;
内伦;
};
结构矩阵{
向量*col;
int ncols;//矩阵中的列总数
};
//结构的初始值设定项函数
向量向量向量init(int);//下文提供
矩阵矩阵元(int,int);//**你必须完成这个
//重载运算符
向量运算符+(向量,向量);//下文提供
向量运算符*(浮点,向量);//**你必须写这个
向量运算符*(矩阵,向量);//**你必须写这个
istream&运算符>>(istream&,Vector&);//下文提供
istream&运算符>>(istream&矩阵&);//**你必须写这个
//其他向量函数
浮点向量点(向量,向量);//**你必须写这个
//主代码
//****在您提交的文件中必须保持不变*****
内部主(空){
内华达州北、北、北、北;
ifstream fin(“材料定义”);
如果(!fin.is_open()){
coutm>>n;
矩阵M=矩阵(M,n);
fin>>M;

cout在为每个向量的元素赋值之前,必须在每个向量中分配数组

Matrix matInit(int m, int n) {
  Matrix bar;

  bar.ncols = n;
  bar.col = new Vector[n]; // use n instead m for consistency

  for (int i=0;i<n;i++) {
    bar.col[i].els = new float[m]; // add this line to allocate arrays
    for (int k=0;k<m;k++) {
      bar.col[i].els[k]=0;
    }
  }

  return bar;
}
矩阵矩阵矩阵(int m,int n){
矩阵条;
bar.ncols=n;
bar.col=新向量[n];//使用n而不是m表示一致性

对于(int i=0;由于随机、随意的缩进,显示的代码大部分不可读。请清理您的代码,并正确缩进,以使其可读性和易读性。欢迎使用堆栈溢出。我们要求,而不仅仅是为了我们自己的方便。如果您将其缩减到最小程度,您可能会自己发现问题。我的ap古物学,我以后会记住的