2012-04-22 7 views
2

私はいくつかのデータを保存するテキストファイルを持っています。さまざまな方法でフォーマットされたデータブロックがいくつかあります。そのため、あるブロックが終了し、別のブロックが開始されたことを知らせるプログラムが必要です。ここには非常に簡単な例があります。さまざまな方法でフォーマットされたファイルデータからの読み取り。 C++

テキストファイル:

a 1 
b 2 
c 3 

qwerty 
asdfgh 
xcvbnm 

私のプログラム:それは後半を読んでいないが

int x; 
char a; 
string line; 

while(ifs >> a >> x) 
    cout << a << " " << x << "\n"; 

cout<<"\n" << "next block of data" << "\n"; 

while(ifs >> line) 
    cout << line; 

。 >>と書式化された読みは空白を破棄したと思ったので、最初のwhile()が失敗した後、2番目のwhile()は後半の読み込みを開始するはずです。ここに私の出力である:誰もがこのことについて読んで何かをお勧めすることができます場合は、

a 1 
b 2 
c 3 

next block of data 

また、私が最も感謝されます。私はいくつかの本やインターネットを検索し、>>演算子の仕組みに関する明確なマニュアルを見つけることができませんでした。

答えて

1

operator>>に障害が発生すると、エラーフラグをクリアしない限り、フェイルビットが設定され、その後の抽出もすべて失敗します。あなたはそれに応じて行動することができるようにあなたは、抽出が失敗した理由を判別しios::bad()ios::fail()ios::eof()を使用することができますios::clear()

while(ifs >> a >> x) 
    cout << a << " " << x << "\n"; 

ifs.clear(); 

を使用してください。

+0

ああ、私の神。それは私のすべての問題でしたか?ありがとうございました。 – user1219520

関連する問題