我真的很沮丧。我正在尝试读取包含以下内容的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;
答案 0 :(得分:2)
您的number
值太大,无法容纳四字节有符号整数。最大值是2147483647(2 ^ 31 - 1),这就是你最后打印出来的原因。 (你没有问过那个问题;我不知道自己是怎么发现的!)
但我也想知道的是你在每张唱片之间有多余的一行。我发现this question讨论了fstream
和分隔符。我想知道它是否被卡在空白行,没有读任何内容,然后输出last
,first
,uin
和number
的相同值。
答案 1 :(得分:0)
可能存在不同类型的错误。最好的方法是ios::good
:
while (!phoneBook.good()) {