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值太大,无法放入四字节有符号整数。它的最大值是 2147483647 (2^31 - 1),这就是你最后打印出来的原因。(你没有问那个问题;我不知道我自己是怎么注意到的!)

但我还想知道的是每条记录之间的额外线。我发现这个讨论fstreams 和分隔符的问题。我想知道它是否卡在空白行,什么也不读,然后只输出相同的last, first,uinnumber.

于 2013-10-12T04:18:53.723 回答
0

可能存在不同类型的错误。最好的使用方法是ios::good

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