2

いくつかのデータを保存するテキストファイルがあります。さまざまな方法でフォーマットされたデータのブロックがいくつかあるので、1つのブロックがいつ終了し、別のブロックがいつ開始するかをプログラムで認識できるようにする必要があります。これは非常に簡単な例です。

テキストファイル:

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

また、誰かがこれについて読むために何かを推薦することができれば、私は最も感謝するでしょう。いくつかの本とインターネットを検索しましたが、>>演算子がどのように機能するかについての明確なマニュアルが見つかりませんでした。

4

1 に答える 1

1

失敗するoperator>>と、失敗ビットが設定され、エラーフラグをクリアしない限り、後続のすべての抽出も失敗します。使用するios::clear()

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

ifs.clear();

を使用して、抽出が失敗した理由を特定できるためios::bad()、それに応じて行動できます。ios::fail()ios::eof()

于 2012-04-22T17:30:31.183 に答える