2013-03-15 4 views
0

Суть моей проблемы в том, что я читаю файл с полями, разделенными #, за исключением конца строки. Когда я смотрю на утверждения печати для полей, которые я читаю в книжной структуре (которая использует цикл for для прохождения через весь файл данных/список книг (теоретически)), все они имеют одинаковое значение. Например, есть 200 одинаковых идентификаторов, за которыми следует 200 одинакового названия, вместо того, чтобы читать дальше файл данных.C++ getline() перезагрузка перед чтением всего файла

Точный код:

void loadTable(book table[], int size){ 
    for (int i = 0; i < size; i++){ 
     book newBook; 
     ifstream ifs("inventory.txt"); 
     string bit; 
     getline(ifs, bit, '#'); 
     newBook.bookId = atoi(bit.c_str()); 
     cout << "BookID: " << newBook.bookId; 
     getline(ifs, bit, '#'); 
     newBook.title = bit; 
     cout << "Title: " << newBook.title; 
     getline(ifs, bit, '#'); 
     newBook.author = bit; 
     getline(ifs, bit, '#'); 
     newBook.cost = atof(bit.c_str()); 
     getline(ifs, bit, '#'); 
     newBook.price = atof(bit.c_str()); 
     getline(ifs, bit); 
     newBook.quantity = atoi(bit.c_str()); 
     loadBook(table, newBook, size); 
    } 

} 

И точный результат:

tiesBookID: 116807Title: A Tale of Two CitiesBookID: 116807Title: A Tale of Two 
CitiesBookID: 116807Title: A Tale of Two CitiesBookID: 116807Title: A Tale of Tw 
o CitiesBookID: 116807Title: A Tale of Two CitiesBookID: 116807Title: A Tale of 
Two CitiesBookID: 116807Title: A Tale of Two CitiesBookID: 116807Title: A Tale o 
f Two CitiesBookID: 116807Title: A Tale of Two CitiesBookID: 116807Title: A Tale 
of Two CitiesBookID: 116807Title: A Tale of Two CitiesBookID: 116807Title: A Ta 
... 

ответ

5

Почему вы всегда открыть вам файл внутри для цикла? Вы должны сначала открыть файл, затем пропустить файл и поместить содержимое, которое вы читаете из файла, в структуру. В этом случае вы всегда читаете первые несколько строк, которые содержат информацию о первой книге, так как вы открываете файл снова и снова, между тем вы не закрыли файл, что не очень хорошо.

+0

Упс. В следующий раз я сделаю перерыв, когда у меня возникнут проблемы, и, возможно, это будет более очевидно. – user963070

Смежные вопросы