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

C++读取.csv文件仅返回最后一行且不显示平均分和等级问题求助

问题排查及修复方案

存在的问题:

  • 输出逻辑放在读取循环外部,每次循环都会覆盖读取的分数变量,循环结束后仅保留最后一行的数值,导致仅输出最后一行
  • 输出时getAvg、getGrade是函数名,没有加参数调用,实际输出的是函数的内存地址,而非计算后的平均分和等级
  • 变量命名冲突:全局域定义了int类型的testScore1~testScore5,main函数中又定义了同名的string类型变量,导致参数传递类型不匹配
  • 缺少<iomanip>头文件,setw格式化函数无法正常生效
  • 平均分计算存在整数截断:5个int值相加后直接做整数除法,会丢失小数部分
  • 循环读取条件不严谨,使用myFile.good()作为判断条件可能出现最后一行重复读取的问题

修复后代码:

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

using namespace std;

double avg;
char grade;

double getAvg(int t1, int t2, int t3, int t4, int t5){
    avg = (double)(t1 + t2 + t3 + t4 + t5)/5;
    return avg;
}

char getGrade(double avg){
    if (avg >= 90){
        grade = 'A';
    }else if (avg >= 80){
        grade = 'B';
    }else if (avg >= 70){
        grade = 'C';
    }else if (avg >= 60){
        grade = 'D';
    }else{
        grade = 'F';
    }
    return grade;
}

int main(){
    ifstream myFile;
    myFile.open("scores.csv");
    
    if(!myFile.is_open()){
        cout << "Error" << endl;
        return 1;
    }
    cout<< setw(15) <<" Test scores"<<endl;
    cout<<"--------------------"<<endl;
    cout<< " 1   2   3   4   5   Avg  Grade"<<endl;
    cout<<"=== === === === === ===== ====="<<endl;

    string s1, s2, s3, s4, s5;
    while (getline(myFile, s1, ',') && getline(myFile, s2, ',') 
        && getline(myFile, s3, ',') && getline(myFile, s4, ',') 
        && getline(myFile, s5, '\n')) {
        int t1 = stoi(s1), t2 = stoi(s2), t3 = stoi(s3), t4 = stoi(s4), t5 = stoi(s5);
        double curAvg = getAvg(t1, t2, t3, t4, t5);
        char curGrade = getGrade(curAvg);
        cout<< " "<< t1<< "  "<< t2 << "  "<< t3 << "  "<< t4 << "  "<< t5
            << "  " << fixed << setprecision(1) << curAvg << "  " << curGrade <<endl;
    }
    myFile.close();
    return 0;
}

修复说明:

  • 把输出逻辑移到循环内部,读取一行计算一行输出一行,不需要使用数组存储所有行数据,符合要求
  • 修正函数调用写法,传入对应参数获取计算结果后输出
  • 修复变量命名冲突问题,将读取的字符串变量改名,转成int后传给计算函数
  • 修正平均分计算逻辑,强制转换为double做除法保留小数
  • 优化循环读取条件,避免无效读取

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 04:27:01