ファイルからリンクリストにデータを読み込む必要がある割り当てに取り組んでいます。これまでのところ、ファイルをリンクリストに問題なく読み込むことができますが、ファイルからリストに読み込むたびに、追加のエントリが1つ表示されます。
これが私の構造です:
struct Video {
char video_name[1024]; // video name
int ranking; // Number of viewer hits
char url[1024]; // video URL
YouTubeVideo *next; // pointer to Video structure
} *head = NULL; // EMPTY linked list
これが私の読み込みコードです:
void load()
{
ifstream rankFile ("Ranking.dbm");
struct Video *temp;
if (rankFile.is_open())
{
string line;
do {
temp = (Video*)malloc(sizeof(Video)); //allocate space for node
temp->next = head;
head = temp;
rankFile.getline(temp->video_name,1024);
rankFile >> temp->ranking;
getline(rankFile, line); // need to skip 'ranking's
// unread new-line
rankFile.getline(temp->url,1024);
}while (rankFile.good() );
rankFile.close();
}
else cout << "Unable to open file";
return ;
}
次のようなファイルから読み取っています。
spiderman
100
spiderman.com
lucy
30
lucy.com
disney
1200
disney.com
これらはすべて正常に読み取られますが、do-while(rankFile.good());
ループがもう1回繰り返され、リンクリストに空のノードが表示されます。私はすでにすべてのgetline()
ステートメントをwhileループの条件として使用しようとしましたが、それは何も変わらないようです。また、使用しrankFile != eof
ても運がありませんでした。
\n
次のI/Oをチェックして、ファイルの終わりではないことを確認する方法はありますか?