Я действительно расстроен. Я пытаюсь прочитать текстовый файл, который имеет следующее содержание:
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;
Ваш number
значения слишком велики, чтобы поместиться в четырехбайтовое целое число со знаком. Максимальное значение для этого — 2147483647 (2 ^ 31 — 1), поэтому вы получаете эту распечатку в конце. (Вы не спрашивали о тот вопрос; Я не знаю, как я сам это заметил!)
Но что еще меня интересует, так это дополнительная строчка между каждой записью. я нашел этот вопрос что обсуждает fstream
с и разделители. Интересно, он застрял в пустой строке, ничего не читал, а затем просто выводил те же значения last
, first
, uin
, а также number
,
Там может быть другой тип ошибки. Лучший метод для использования ios::good
:
while (!phoneBook.good()) {