2013-10-12 16 views
2

我真的很沮喪。我想讀它具有以下內容的txt文件:C++ fstream繼續閱讀相同的前5行?

Arenas 
Edward 
239924731 
2525976612 

Autry 
Richard 
527646269 
6028236739 

使用此代碼:

#include <iostream> 
#include <fstream> 
#include <sstream> 
using namespace std; 

int main(int argc, const char * argv[]) 
{ 
    string line; 
    string last, first; 
    int uin, number; 
    ifstream phoneBook; 
    phoneBook.open("PhoneBook.txt"); 

    while (!phoneBook.eof()) { 
     phoneBook >> last >> first >> uin >> number; 
     cout << last << ", " << first << ", " << uin << ", " << number <<endl; 
    } 




    return 0; 
} 

輸出將是相同的接觸不休

Arenas, Edward, 239924731, 2147483647 
Arenas, Edward, 239924731, 2147483647 
Arenas, Edward, 239924731, 2147483647 
Arenas, Edward, 239924731, 2147483647 
Arenas, Edward, 239924731, 2147483647 

我也嘗試此版本的while循環:

while (phoneBook >> last >> first >> uin >> number) { 

    cout << last << ", " << first << ", " << uin << ", " << number <<endl; 
} 

由於某些原因,編譯器甚至沒有進入循環。它會跳轉到返回0;

+0

此外,將電話號碼存儲爲文本而不是整數通常是個好主意。如果它以0開頭呢? – Dan

回答

2

number值太大,無法進入四字節有符號整數。最大值是2147483647(2^31 - 1),這就是爲什麼你在最後打印出來的原因。 (你不是問問題,我不知道我是怎麼發現它自己!)

但是我也想知道的是,您在每次記錄之間有多餘的線。我發現this question討論fstream s和分隔符。我想知道它是否卡在空行,什麼都不讀,然後輸出相同的值last,first,uinnumber

+0

很明顯,它確實爲第一次聯繫打印出來。問題是while循環。它沒有按預期運行! –

+0

我在評論時編輯了我的答案。 (你也可能想用'long int'作爲你的'number'變量。 – John

+0

謝謝!我沒注意到。 –

0

可能存在不同類型的錯誤。用最好的方法是ios::good

while (!phoneBook.good()) { 
+0

我試過這個,它沒有工作。它只循環一次並打印一個聯繫人。 –