文本文件包含格式如下的行:
lSdhmhlN 15479 6694.74 O
szUfGnoI 18760 5275.53 n
我正在逐行读取文件,将其数据放入缓冲区变量,将这些变量存储在TopicD对象中,然后将该对象插入到二叉搜索树中。问题是文件的最后一行被读取两次,以便创建两个相同的TopicD对象并将其插入树中。为什么呢?
这是我的代码:
template<class ItemType>
void read( BinarySearchTree<ItemType> & tree )
{
ifstream read( FILE_NAME.c_str() );
if ( read.fail() )
die( "Error opening the file." );
string strbuff;
double dubbuff;
int intbuff;
char chbuff;
while ( !read.eof() )
{
read >> strbuff;
read >> intbuff;
read >> dubbuff;
read >> chbuff;
TopicD buff( strbuff, dubbuff, intbuff, chbuff );
tree.add(buff);
}
read.close();
}
答案 0 :(得分:3)
考虑从该循环中剪掉一点:
while (read >> strbuff >> intbuff >> dubbuff >> chbuff)
tree.add(TopicD( strbuff, dubbuff, intbuff, chbuff ));
当达到 EOF时,永远不要依赖.eof()
为真。相反,当你在那里时,你会尝试再读一遍,这将是真的。因此,在到达EOF之后你的第一次阅读失败了,但到那时你已经停止检查错误(顺便说一句,你从未检查过这些错误)并且只是盲目地将变量中的任何内容插入树中。