2012-04-17 84 views
1

我試圖在讀取文件時獲取每個文件行的起始地址,並將其打印到屏幕上,但由於某種原因,它只會導致無限循環。我正在閱讀的文件只是一個普通的文本文件。這是我現在要做的。開始地址無盡循環

#include <iostream> 
#include <iomanip> 
#include <fstream> 
#include <string> 
using namespace std; 

int main(int argc, char* argv){ 
    ifstream file; 
    string name, lnstr; 
    int addy; 

    if (argc > 1) 
     name = argv[1]; 
    else 
    { 
     cout << "Please Enter Your Filename: "; 
     getline(cin, name); 
    } 
    file.open(name.data()); 
    if(!file) 
    { 
     perror(name.data()); 
     exit(1); 
    } 
    addy = 0; 
    while(getline(file, lnstr)) 
    { 
     cout << file.seekg(addy, ios::beg) << endl; 
     addy++; 
    } 
} 

即使我把0作爲seekg的第一個參數,它仍然會導致一個無限循環,或者它只是顯示了相同數量的一堆倍。不知道我錯過了什麼。

+1

思考什麼ios :: beg你的while循環 – 2012-04-17 04:16:41

回答

3

當您調用ios :: beg時,您將get指針的位置設置爲文件的開頭。您實際上不需要此呼叫,並且此代碼應該適用於您:

file.open(name.c_str()); // open file 
if(file) { 
    while(getline(file, lnstr)) { 
    cout<< lnstr <<endl; 
    } 
} 

More on seekg

+0

lnstr只是我的文件中的文本。我是否希望將它轉換爲c_str()來使其工作? – Derp 2012-04-17 04:42:44

+0

在你的情況下,如果你將Instr聲明爲一個字符串,你不需要使用c_str()。 – Erwald 2012-04-17 13:29:56

2

我想你想tellg,而不是seekg

+0

沒錯,但我試圖在8字節的值中顯示它 – Derp 2012-04-17 04:48:37

+0

我不明白。顯示什麼是8字節值? – 2012-04-17 04:58:02

+0

地址爲8byte值 – Derp 2012-04-17 05:20:58