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

如何用C++结构体循环读取文件中多组学生数据并输出?

解决C++结构体循环读取多组学生文件数据的问题

你遇到的核心问题是只读取了单个学生的数据,没有通过循环持续读取文件里的后续内容。只要给读取逻辑加上循环处理,就能一次性把所有学生信息都读出来并输出。

我给你整理了修正后的完整代码,顺便调整了一些规范细节:

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

struct student {
    string name;
    int scores[5];
    string faculty;
};

int main() {
    student currentStudent;
    ifstream inputFile("你的文件名.txt"); // 记得替换成实际的文件路径/名称

    // 先检查文件是否成功打开
    if (!inputFile.is_open()) {
        cerr << "Error: 无法打开目标文件!" << endl;
        return 1;
    }

    // 循环读取直到文件结束
    // 以读取姓名作为循环条件:如果读不到姓名(文件末尾),循环自动终止
    while (inputFile >> currentStudent.name) {
        // 读取5门成绩
        for (int i = 0; i < 5; ++i) {
            inputFile >> currentStudent.scores[i];
        }
        // 读取院系信息
        inputFile >> currentStudent.faculty;

        // 输出当前学生的信息
        cout << "姓名: " << currentStudent.name << endl;
        cout << "成绩: ";
        for (int score : currentStudent.scores) {
            cout << score << " ";
        }
        cout << endl;
        cout << "院系: " << currentStudent.faculty << endl;
        cout << "-------------------------" << endl;
    }

    inputFile.close();
    return 0;
}

关键说明:

  • 循环读取逻辑:用while (inputFile >> currentStudent.name)作为循环判断,因为当文件读到末尾时,>>运算符会返回false,循环就会停止。这样就能依次遍历所有学生的数据。
  • 文件打开检查:添加了文件是否成功打开的判断,避免因为文件不存在、路径错误或权限问题导致程序崩溃。
  • main函数规范:标准C++要求main函数的返回类型是int,而不是void,这个小细节修正后更符合语言规范。
  • 数据匹配:严格按照文件里的字段顺序(姓名→5个成绩→院系)读取,确保每个数据都对应到结构体的正确成员上。

不管你的文件里每组学生数据是在同一行还是换行分隔,这个逻辑都能正常工作——因为>>运算符会自动跳过空格、制表符和换行符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:25:27