Читать файл в C ++ - PullRequest
       2

Читать файл в C ++

2 голосов
/ 09 июля 2011

Я написал следующий код для чтения содержимого файла:

#include <ifstream>
#include <iostream>
using namespace std;

int main(){
    char file_name[30] = "data.txt";
    // Create an ifstream to read the file.
    ifstream People_in(file_name);
      while (1) {
        if (People_in.eof())
            break;
        People_in >> first_name >> last_name >> age;
        cout << endl << "First Name: " << first_name;
        cout << endl << "Last Name:  " << last_name;
        cout << endl << "Enter Age:  " << age;
        cout << endl;

      }
      People_in.close();
      return 0;
  }

data.txt content:

FirstName1
LastName1
1
FirstName2
LastName2
2
FirstName3
LastName3
3

Результат, который я ожидал:

First Name: FirstName1
Last Name: LastName1
Age: 1

First Name: FirstName2
Last Name: LastName2
Age: 2

First Name: FirstName3
Last Name: LastName3
Age: 3

Но вывод:

First Name: FirstName1
Last Name: LastName1
Age: 1

First Name: FirstName2
Last Name: LastName2
Age: 2

First Name: FirstName3
Last Name: LastName3
Age: 3

First Name: FirstName3
Last Name: LastName3
Age: 3

Не могу понять, почему?PeopleIn должен достигнуть eof, когда он прочитает все данные.Но как это может повторить последние 3 строки ??

Ответы [ 4 ]

3 голосов
/ 09 июля 2011

Это потому, что после последнего шага eof не достигается (в вашем файле есть символ после 3).

Попробуйте:

while (People_in >> first_name >> last_name >> age)
{
    cout << endl << "First Name: " << first_name;
    cout << endl << "Last Name:  " << last_name;
    cout << endl << "Enter Age:  " << age;
    cout << endl;
}
0 голосов
/ 09 июля 2011

Даже без символа новой строки в конце файла код все равно будет печатать дополнительный ввод. Вместо этого, после того, как вы прочитали имя, фамилию в возрасте, попробуйте:

People_in >> first_name >> last_name >> age;
if (first_name.length() == 0)
    break;
....
0 голосов
/ 09 июля 2011

попробуй вот так

  while (People_in) {
//... 
}

удалить часть разрыва

0 голосов
/ 09 июля 2011

Убедитесь, что в конце файла нет лишних новых строк. Кажется, есть дополнительный набор новых строк (\n), и это вызывает сбой метода eof.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...