2016-03-28 6 views
0

istream演算子をオーバーロードすることによってファイルから入力を取得しようとしています。そのために、私はクラスの友人として宣言しました。その後、私は、入力として取り、このような同じクラスということ:私はこれが動作する必要が私のコードの一部をデバッグしようとしている場合は、このに期待されるようオーバーロードされた入力ストリーム演算子を使用してファイルを読み込む>>

file >> *(class pointer); 

、それは行く:

istream& operator>> (istream& in, MYCLASS& n) 
{ 
    string buffer; 
    while (!in.eof()) { // input is a file 
     in >> buffer; 
     // do stuff 
    } 
    return in; 
} 

問題は、バッファが空( "")のままで、ファイルから取ってくるものを取らないということです。

* Name Age 
* Name Age 
* Name Age 
... 

私は私のIStream過負荷の内側に入れておくべきこと:私は問題なく他の場所私のコードで同様の方法を使用していますが、ここではケースにあるので、通常、ファイルのフォーマットは問題にはなりません関数なので、意図したとおりの入力が得られますか?

答えて

0

この...

while (!in.eof()) { 

...壊れています。変数にデータを読み込んで解析するようにしてください。そしてが失敗したかどうかを確認してください。最後のMYCLASSを読んだ後で必ずファイルの最後にいると想定しないでください。代わりに:

string name; 
int age; 
while (in >> name >> age) 
    ...do stuff... 

あなたが本当に各行の先頭にドットのいくつかの種類を持っていれば、charを追加してもそれに読み込ま:

char dot; 
string name; 
int age; 
while (in >> dot && dot == '.' && in >> name >> age) 
    ...do stuff... 

をより一般的には、それが非常にスケーラブルなモデルではありません残りの入力ストリームに1つのMYCLASSオブジェクトが含まれているとします。代わりに区切り記号を付けることもできます(たとえば、行の最初の単語が名前ではない場合は、<END>)、ループを終了します。

+0

ありがとう、あなたが説明したことで、私は解決策を見つけることができました! –

関連する問題