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