2013-03-15 77 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 2013-03-15 19:26:32

相關問題