2

私は本当にイライラしています。次の内容の txt ファイルを読み取ろうとしています。

Arenas
Edward
239924731
2525976612

Autry
Richard
527646269
6028236739

このコードを使用:

#include <iostream>
#include <fstream>
#include <sstream>
using namespace std;

int main(int argc, const char * argv[])
{
     string line;
     string last, first;
     int uin, number;
     ifstream phoneBook;
     phoneBook.open("PhoneBook.txt");

    while (!phoneBook.eof()) {
        phoneBook >> last >> first >> uin >> number;
        cout << last << ", " << first << ", " << uin << ", " << number <<endl;
    }




    return 0;
}

出力は無限に同じ接点になります

Arenas, Edward, 239924731, 2147483647
Arenas, Edward, 239924731, 2147483647
Arenas, Edward, 239924731, 2147483647
Arenas, Edward, 239924731, 2147483647
Arenas, Edward, 239924731, 2147483647

このバージョンの while ループも試しました。

while (phoneBook >> last >> first >> uin >> number) {

    cout << last << ", " << first << ", " << uin << ", " << number <<endl;
}

何らかの理由で、コンパイラはループにステップインしません。ジャンプして 0 を返すだけです。

4

2 に答える 2

2

number値が大きすぎて、4 バイトの符号付き整数に収まりません。その最大値は 2147483647 (2^31 - 1) です。これが、最後に出力される理由です。(あなたはその問題について尋ねていませんでした。どうやって自分で気づいたのかわかりません!)

しかし、私が疑問に思っているのは、各レコードの間にある余分な行です。s と区切り文字について説明しているこの質問を見つけました。空白行でスタックして何も読み取らず、 、、、およびfstreamの同じ値を出力しているのではないでしょうか。lastfirstuinnumber

于 2013-10-12T04:18:53.723 に答える
0

異なる種類のエラーが発生する可能性があります。使用する最良の方法は次のios::goodとおりです。

while (!phoneBook.good()) {
于 2013-10-12T04:16:57.310 に答える