файл io — C ++ fstream продолжает читать одни и те же первые 5 строк?

Я действительно расстроен. Я пытаюсь прочитать текстовый файл, который имеет следующее содержание:

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;

2

Решение

Ваш number значения слишком велики, чтобы поместиться в четырехбайтовое целое число со знаком. Максимальное значение для этого — 2147483647 (2 ^ 31 — 1), поэтому вы получаете эту распечатку в конце. (Вы не спрашивали о тот вопрос; Я не знаю, как я сам это заметил!)

Но что еще меня интересует, так это дополнительная строчка между каждой записью. я нашел этот вопрос что обсуждает fstreamс и разделители. Интересно, он застрял в пустой строке, ничего не читал, а затем просто выводил те же значения last, first, uin, а также number,

2

Другие решения

Там может быть другой тип ошибки. Лучший метод для использования ios::good:

while (!phoneBook.good()) {
0

По вопросам рекламы [email protected]