2012-04-17 3 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++; 
    } 
} 

私はseekgの最初のパラメータとして0を入れたとしても、それはまだ無限ループになり、またはそれはちょうど同じ数を何回の束を示しています。私は何が欠けているか分からない。

+1

whileループでios :: begが何をすると思います –

答えて

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()に変換するためにhvaeを使用しますか? – Derp

+0

あなたの場合、Instrを文字列として宣言すると、c_str()を使う必要はありません。 – Erwald

2

私はあなたがtellgseekgではないと思うと思います。

+0

いいえ、私は8バイトの値でそれを表示しようとしています – Derp

+0

私は分かりません。 8バイトの値として何を表示しますか? –

+0

8バイト値のアドレス – Derp