所以我试图从数字文件中读取以创建矩阵(维度由用户指定)。问题在于,每当我尝试从文件中制作第二个矩阵时,文件指针都会重置并最终两次都重新拍摄相同的矩阵。我在我的函数中通过引用传递了fin,因为我们的教授说它会解决这个问题,但它并没有阻止指针重置。
这是我的功能:
// creates a matrix from a file
vector<int> filefill(ifstream &fin, string file, int rowsize, int columnsize) {
fin.open(file.c_str());
vector<int> matrix;
int number;
int i=0;
while((fin >> number) && i < rowsize*columnsize) {
matrix.push_back(number);
i++;
}
fin.close();
return matrix;
}
// writes a matrix onto a file
void fileout(string file, vector<int> matrix) {
ofstream fout;
fout.open(file.c_str());
for(int i=0; i < matrix.size(); i++)
fout << matrix[i] << endl;
fout.close();
}
以下是他们的主要内容:
vector<int> matrixA;
vector<int> matrixB;
cout << "Would you like to fill the matrices from a file?(Y/N) ";
string answer;
cin >> answer;
if (answer == "Y" || answer == "y") {
cout << "Please enter file name: ";
string file;
cin >> file;
ifstream fin;
matrixA = filefill(fin, file, Arow, Bcolumn);
matrixB = filefill(fin, file, Arow, Bcolumn);
vector<int>matrixC= addmat(matrixA, matrixB);
cout << endl << "Type in (1) to output to file OR" << endl << "Type in (2) to output to console: ";
string output;
cin >> output;
if(output == "1") {
cout << "Enter the file name you wish to output to: ";
string filo;
cin >> filo;
fileout(filo,matrixA);
fileout(filo,matrixB);
fileout(filo,matrixC);
}
答案 0 :(得分:1)
filefill()
]时, fin.open(file.c_str());
都会打开文件。
在调用filefill()
之前打开文件并将其传入(并从filefill()
内删除打开。您的代码已经通过了fin
,所以它已经到了一半!
编辑:正如JonnyHenly正确指出的那样 - 当你移动fin.close()
filefill()
移动fin.open()