Question

I've been working on a class assignment for C++ and we're required to acquire input from a text file and assign those values to an array....one is a string, the second an int, and the third a double.

We've only been introduced to arrays and I don't know anything yet about pointers or linked lists, or any of the higher end stuff, so I feel like I'm somewhat limited in my options. I've worked all day trying to figure out a way to acquire input from the text file and assign it to the appropriate array. I've tried to use getline to read the input file and set a delimiter to separate each piece of data but I get an error when I try to use it more than once. From what I've read, this has to do with how I'm overloading the function but I'm at a loss at resolving it. Every explanation I've read about it goes beyond my current level of familiarity. Right now, I'm focused on this fragment of code:

for (int i = 0; i < EMP_NUM; i++) // Get input from text file for names.
    getline(inFile, nameAr[i], '*');

for (int i = 0; i < EMP_NUM; i++) // Input for hours.
    getline(inFile, hoursAr[i], '*');

for (int i=0; i < EMP_NUM; i++) // Input for hourly rate.
    getline(inFile, hrateAr[i], '*');

I'm trying to use getline three times and write the data to three separate arrays, then make a series of calculations with them later and output them to another text file. The first instance of getline doesn't produce any compiler errors but the latter two do. I'm not quite sure of another solution to get the data into my arrays, so I'm at a loss. Any help would be great!

Was it helpful?

Solution

1) Instead of three different iteration, use only one

2) Pass string object in getline instead of pointers

string buf;
for (int i = 0; i < EMP_NUM; i++) // Get input from text file for names.
{
    getline(inFile, buf, '*');
    nameAr[i] = buf;
    getline(inFile, buf, '*');  //assuming delimiter is again *
    hoursAr[i] = atoi(buf.c_str() );  //C way to doing it...however in c++ u have to use stringstreams....
    getline(inFile, buf);
    hrateAr[i] = atof(buf.c_str() );;
}

OTHER TIPS

If I understand correctly you merely have three values in a file: a string, an int and a double. I assume they are delimited by whitespace.

If that is so then you don't need std::getline(). Rather, use the extraction operator:

std::ifstream file("input.txt");
std::string s;
if( ! (file >> s) ) {  // a single word extracted from the file
    // failure
}
int n;
// ...

What do the compiler errors say? Are you sure that the error is caused by getline? Maybe it's not because the getline calls but because of multiple declarations of i.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top