在c++中读取文件

Read file in C++

本文关键字:文件 读取 c++      更新时间:2023-10-16

我写了下面的代码来读取文件的内容:

#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内容:

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在读取所有数据时应该达到0。但它怎么能重复最后3行呢?

这是因为在最后一步之后没有到达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;
}

检查文件末尾没有额外的新行。似乎有一组额外的新行(n),这是导致eof方法失败。

即使在文件末尾没有换行符,代码仍然会打印额外的输入。相反,在你读了名字和年龄之后,试试:

People_in >> first_name >> last_name >> age;
if (first_name.length() == 0)
    break;
....

像这样试试

  while (People_in) {
//... 
}

删除if分隔符