Comp Sci C++: continuous reading file while doing calculation in between?

AI Thread Summary
The discussion revolves around a C++ programming challenge where a user seeks to read parameters from a file continuously while performing calculations. The user initially faces issues because the file is opened and closed within the function, causing it to only read the first line repeatedly. A suggested solution is to pass the file stream as an argument to the function rather than creating it inside, allowing for continuous reading of the file. The user successfully implements this advice and resolves their issue. This highlights the importance of managing file streams properly in C++ for effective data handling.
madtraveller
Messages
28
Reaction score
0

Homework Statement


I have 1 class for reading parameter from file (example below) and 1 class for doing calculation
For every step, I'd like to read in parameter and do calculation in between.

For i = 0 to number of lines in parameter file
Read in parameter;
Calculation;
End

My problem is that I don't know how to read a file continuously. Every time I called the function in parameter class, it just received the first line :(

Could anyone give me some suggestion?
Thank you

* Sample parameter file
Code:
m	TD	T	V	Sa	Sb
0.5	246.6	39.6	6.1	0.4	0.6
0.5	394.8	39.7	4.6	0.9	0.2
0.0	391.3	39.0	3.6	1.0	0.6
0.4	350.1	39.0	8.8	0.6	0.3
0.3	94.1	38.9	6.0	0.6	0.7
0.5	95.0	38.5	7.2	1.0	0.0
0.3	86.4	39.3	3.4	0.4	0.4
0.5	404.5	39.8	0.9	0.9	0.3
0.4	252.7	39.3	7.9	0.6	0.4
0.5	1.3	39.9	2.4	1.0	0.7
0.2	36.0	39.9	3.5	0.4	0.5
...

The attempt at a solution

Parameter class:

Code:
bool parameters::get_parameter_from_file(const string &filename)
{
 
    ifstream inputfile(filename.c_str());

    if ( !inputfile )
    {
        cerr << "Error: file could not be opened" << endl;
        return false;
    }

    string dummy_string;                // temporary string to store unnecessary words

    // read through the header
    inputfile >> dummy_string >> dummy_string >> dummy_string
            >> dummy_string >> dummy_string >> dummy_string;

    // read parameters
    inputfile >> m >> TD >> T >> V >> Sa >> Sb;

   inputfile.close();
    return true;
}
 
Physics news on Phys.org
Pass the stream as an argument to get_parameter_from_file instead of the file name.
 
D H said:
Pass the stream as an argument to get_parameter_from_file instead of the file name.

Thanks. Maybe I'm just stupid but could you please be more detailed on your point?
 
The entire problem stems from your opening the file inside that function and then closing it before exiting. The solution is the same as the advice given by a doctor to a complaint, "Doc, it hurts when I do this." The advice: "Don't do that then."

What you need to do instead is to pass the stream as an argument to the function instead of creating the stream inside the function. That means you have to create (and destroy) the stream outside of your function. In your main(), for example.
 
Thanks DH. Mine works fine now!
 
Back
Top