You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用C++读取文本文件中学生信息并存储为Student对象的vector

实现思路
  • 第一步:定义符合字段要求的Student类,包含id、名、姓、院系、GPA五个成员属性,添加构造函数方便初始化
  • 第二步:修正原有vector的类型,将std::vector<std::string>改为std::vector<Student>,用于存储所有学生实例
  • 第三步:优化读取逻辑:逐行读取文件后,直接从每行的字符串流中按顺序读取5个字段,依次赋值给临时Student对象的对应属性,读完一行就将该对象插入vector中,不需要嵌套循环读取单个单词
  • 第四步:补充异常判断,比如文件打开失败提示、每行字段读取失败的兼容处理,避免程序崩溃
完整可运行代码
#include <iostream>
#include <fstream>
#include <sstream>
#include <vector>
#include <string>

// 定义Student类
class Student {
public:
    std::string id;
    std::string fname;
    std::string lname;
    std::string department;
    double gpa;

    // 构造函数
    Student() = default;
    Student(std::string i, std::string fn, std::string ln, std::string dept, double g) 
        : id(i), fname(fn), lname(ln), department(dept), gpa(g) {}
};

int main()
{
    std::vector<Student> students; // 存储Student对象的vector
    std::ifstream inputFile("enroll_assg.txt");
    std::string line;

    if(inputFile.is_open()){
        while(std::getline(inputFile, line)){
            std::istringstream iss(line);
            // 临时变量存储当前行的5个字段
            std::string id, fname, lname, dept;
            double gpa;
            // 按顺序读取5个字段,读取成功才存入vector
            if(iss >> id >> fname >> lname >> dept >> gpa) {
                students.emplace_back(id, fname, lname, dept, gpa);
                // 取消下方注释可验证读取结果
                // std::cout << id << " " << fname << " " << lname << " " << dept << " " << gpa << std::endl;
            }
        }
        inputFile.close();
        std::cout << "读取完成,共" << students.size() << "名学生信息" << std::endl;
    } else {
        std::cerr << "文件打开失败,请检查文件路径是否正确" << std::endl;
    }

    // 后续直接操作students向量即可使用所有学生数据
    return 0;
}
原有代码问题说明
  • 原来的vector存储类型错误,声明为存储string的容器无法存储Student对象
  • 嵌套了两层读取单词的循环,导致每个字段单独输出,不符合按行分组读取的需求
  • 用new创建的Student对象没有被正确使用,也没有释放会造成内存泄漏,直接用栈对象或者emplace_back构造更安全

内容的提问来源于stack exchange,提问作者codingisfun543

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 10:57:03