如何阻止fin“文件指针”重置回文件c ++的开头?

时间:2015-12-07 03:10:19

标签: c++

所以我试图从数字文件中读取以创建矩阵(维度由用户指定)。问题在于,每当我尝试从文件中制作第二个矩阵时,文件指针都会重置并最终两次都重新拍摄相同的矩阵。我在我的函数中通过引用传递了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);
    }

1 个答案:

答案 0 :(得分:1)

每次[filefill()]时,

fin.open(file.c_str());都会打开文件。

在调用filefill()之前打开文件并将其传入(并从filefill()内删除打开。您的代码已经通过了fin,所以它已经到了一半!

编辑:正如JonnyHenly正确指出的那样 - 当你移动fin.close()

时,不要忘记从filefill()移动fin.open()