简体   繁体   中英

Using getline() to read input (with spaces) from file into a structure

I am currently in a C++ data structures class and I am extremely new to c++. My goal here is to read lines from a file and store them into a structure. The lines contain elements of a book. My problem is that some lines have spaces, and I'm not sure how to properly read them into a structure. I can't seem to use getline() correctly to read the lines into each element of the structure. If I run it as is, I get the message error: expected primary expression before 'infile' . Apologies if this post isn't formatted correctly, this is also my first stack overflow post! Any help??

This is what my structure looks like:

typedef struct book {
    char title[100];
    char author[100];
    char publisher[100];
    float price;
    char isbn[100];
    int pages;
    int copies;
} Book;

And this is how I am trying to read lines into the structure:

for (int i=0; i < currentIndex; i++) {
    getline(ifstream infile, my_book[i].title);
    getline(ifstream infile, my_book[i].author);
    getline(ifstream infile, my_book[i].publisher);
    getline(ifstream infile, my_book[i].price);
    getline(ifstream infile, my_book[i].isbn);
    getline(ifstream infile, my_book[i].pages);
    getline(ifstream infile, my_book[i].copies);
    currentIndex++;
}

The text file will have book information listed as such:

Magician: Apprentice
Raymond E. Feist
Spectra (January 1, 1994)
5.02
0553564943
512
1

1 - first declare infile outside for loop then use it.

2 - getline(infile, book[i]....) is not infile.getline(book[i]... , size,..) the first is used with class string and the second is used with array of characters.

so your program may look like:

ifstream infile("data.txt", ios::in); // your data file

for (int i=0; i < currentIndex; i++)
{
       infile.getline(my_book[i].title    , 100, '\n');
       infile.getline(my_book[i].author   , 100, '\n');
       infile.getline(my_book[i].publisher, 100, '\n');
       infile >> my_book[i].price;
       infile.getline(my_book[i].isbn     , 100, '\n');
       infile >> my_book[i].pages;
       infile >> my_book[i].copies;
       currentIndex++;
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM