我正在执行一项任务,我需要将文件中的数据读取到链接列表中。到目前为止,我能够毫无问题地将文件读入链接列表,但是每次我从文件中读取到列表中时,我都会得到一个额外的条目:
这是我的结构:
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());
循环又经历了一次迭代,给了我链表中的一个空节点。我已经尝试使用我的所有getline()
语句作为 while 循环的条件,但这似乎并没有改变任何东西。也使用rankFile != eof
给了我没有运气。
有没有办法检查下一个 I/O 以确保它不是\n
或文件结尾?