首页 > 解决方案 > 从不同功能的文件中读取

问题描述

我试图从另一个函数中读取同一个文件,但它不起作用。我想问题是我正在尝试读取,ifstream &input但我不知道实现它的另一种方法

#include <iostream>
#include <fstream>

using namespace std;

class Student{
    public:
    char name[40]; // i cant use string
    int age;

    void Input(ifstream &input)
    {
        input.getline(name, 40);
        input >> age;
    }
};

void Read(Student *students, int &numberOfStudents)
{
    ifstream input("test.txt");

    input >> numberOfStudents;

    students = new Student[numberOfStudents];

    for (int i = 0; i < numberOfStudents; ++i)
        students[i].Input(input);

    input.close();
}

int main()
{
    int size = 0;
    Student *students = NULL;

    Read(students, size);

    for (int i = 0; i < size; ++i)
        cout << students[i].name << endl << students[i].age << endl;

    return 0;  
}

我做了我的输入文件

3
1
2
3
4
5
6

(如果程序正常工作,我应该得到 1 - name age - 2 等)但我得到的是分别没有年龄 = 1 2 3 的名字

标签: c++fstream

解决方案


该程序不起作用,因为您定义了:

void Read(Student *students, int &numberOfStudents)

接着

int size = 0;
Student *students = NULL;
Read(students, size);

指针是按值students传递的,因此不能更改函数外部的内存地址。Read()

要解决此问题,只需通过引用传递指针:

void Read(Student *& students, int &numberOfStudents)

'\n'最后,正如我评论的那样,您需要在使用>>运算符提取数据时在文件中考虑空格,例如行尾:

void Input(ifstream &input)
{
    input.getline(name, 40);
    input >> age;
    input.ignore(1);
}

读取文件中的学生人数也是如此。


推荐阅读