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.