2013-03-18 82 views
2

文本文件包含格式化的,像這樣的行:項目兩次

lSdhmhlN 15479 6694.74 O 
szUfGnoI 18760 5275.53 n 

我讀一行文件中的行,把它的數據到buffer變量,存儲在這些變量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(); 
} 

回答

3

考慮剪斷只是有點出該循環:

while (read >> strbuff >> intbuff >> dubbuff >> chbuff) 
    tree.add(TopicD(strbuff, dubbuff, intbuff, chbuff)); 

從不依靠.eof()是真實的,當你到達EOF。相反,當你除了其他事情之外,當你在那裏時,你會再次嘗試閱讀。因此,在到達EOF後您的第一次讀取失敗,但到那時您已經停止檢查錯誤(順便說一句,您從來沒有檢查過),只是盲目地將變量中的任何內容插入到樹中。

相關問題