Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.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++_Pointers_File Io_Matrix_Matrix Multiplication - Fatal编程技术网

C++ 我不知道如何从文件中读取矩阵的常量值

C++ 我不知道如何从文件中读取矩阵的常量值,c++,pointers,file-io,matrix,matrix-multiplication,C++,Pointers,File Io,Matrix,Matrix Multiplication,我很困惑,如果你对我的问题感到困惑,我也不会感到惊讶。我要做的是创建一个程序,从文件中读取向量/矩阵维度/内容,创建数组,然后执行操作 ifstream in("input.txt"); stringstream buffer; buffer << in.rdbuf(); string test = buffer.str(); string line; ifstream file("input.txt"); string contents; int* conv; while (g

我很困惑,如果你对我的问题感到困惑,我也不会感到惊讶。我要做的是创建一个程序,从文件中读取向量/矩阵维度/内容,创建数组,然后执行操作

ifstream in("input.txt");
stringstream buffer;
buffer << in.rdbuf();
string test = buffer.str();

string line;
ifstream file("input.txt");
string contents;
int* conv;

while (getline(file, line)){
    *conv = atoi(line.c_str());
    //cout << conv << endl;
    size_t pos = line.find("#");
    contents = line.substr(pos + 1);
    //cout << contents << endl;
}
int row = conv[4];
int column = conv[5];
int aMatrix[row];
file.close();
cin.get();
很明显,我得到的错误是,我必须有一个常量。但是,由于我正在从文件中读取,所以在读取文件之前,我不确定如何获取常量

该文件包含诸如34123456789123之类的行,这些行转换为包含1234…3内容的3 x 4矩阵。上面的大部分代码都是我如何读入文件,将字符串分为大小和内容,并将它们转换为int

函数的参数为例如矩阵*矩阵:

int** mxm(int **A, int **B, int rowsA, int colsA, int rowsB, int colsB){
    int** value = NULL;
    for (int i = 0; i < rowsA; i++){
        for (int j = 0; i < colsA; i++){
            for (int k = 0; k < colsB; k++){
                **value += A[i][j] * B[i][k];
            }
        }
    }return value;
}

编辑:我应该提到,虽然我可以清楚地看到该矩阵是3x4,但下一个矩阵是4x3。当我运行程序时,我不应该有任何输入,程序应该能够通过读取文件来完成。

如果需要创建数组,并且在运行时之前您不知道数组的大小,则需要使用指针。你可以这样做:

int rows;
std::cout << "Rows: ";
std::cin >> rows;

int * values = new int[rows];
// when done call delete [];
delete [] values;
如果需要进行2个尺寸标注,则可以使用:

int rows, cols;
std::cout << "Rows: ";
std::cin >> rows;
std::cout << "Cols: ";
std::cin >> cols;

int ** values = new int[rows];
for (int i = 0; i < rows; i++)
    values[i] = new int[cols];
// when done call delete [] for both dimensions;
for (int i = 0; i < rows; i++)
    delete [] values[i];
delete [] values;

*conv=。。。这将调用未定义的行为,因此您可能会遇到比您想象的更多的问题。conv是一个不确定的指针。你应该用一个类来表示你的矩阵,而不是一个int**我确实需要使用二维,因为它是一个矩阵,但是用这种方式,cout/cin组合不会要求我输入行数和列数吗?因为我不能输入任何东西,所以我必须从文件中读取它。@user3768611:我只是演示如何获取值和创建数组。如果您使用文件流获取行和列信息,则在创建数组时仍会执行相同的操作。这是一种基本方法,不需要执行。有些容器可以在运行时调整大小,例如std::vector。@MattMcNabb:我应该举一个例子,说明如何使用vector实现这一点吗?我只是在用指针,因为OP就是这么用的。