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

C#读取CSV文件输出班级学生成绩仅显示1人问题求助

代码问题说明与修改方案

核心问题

  • 现有代码仅调用了1次ReadLine()方法,仅读取到CSV文件的第一行数据,没有遍历所有行,因此只能输出1名学生的信息
  • 代码存在数组长度硬编码、重复打开CSV文件两次的不合理逻辑,和CSV每行对应1名学生的存储结构不匹配

推荐修改方案

步骤1:定义学生数据结构(可选,便于维护)

public class Student
{
    public string Name { get; set; }
    public int Mark { get; set; }
}

步骤2:合并读取逻辑,一次遍历所有行

替换原有的loadNames、loadMarks两个方法,避免重复打开文件:

static List<Student> LoadStudents()
{
    string filename = @"testMarks.csv";
    List<Student> students = new List<Student>();
    using (StreamReader currentfile = new StreamReader(filename))
    {
        string line;
        // 循环读取直到文件末尾
        while ((line = currentfile.ReadLine()) != null)
        {
            if (string.IsNullOrWhiteSpace(line)) continue;
            string[] lineItems = line.Split(',');
            if (lineItems.Length < 2) continue;
            students.Add(new Student
            {
                Name = lineItems[0].Trim(),
                Mark = int.Parse(lineItems[1].Trim())
            });
        }
    }
    return students;
}

步骤3:修改Main方法调用逻辑

public static void Main(string[] args)
{
    var students = LoadStudents();
    OutputMarks(students);
    Console.ReadKey();
}

步骤4:重写输出方法,移除硬编码的循环长度

static void OutputMarks(List<Student> students)
{
    Console.WriteLine("姓名\t分数");
    foreach (var stu in students)
    {
        Console.WriteLine($"{stu.Name}\t{stu.Mark}");
    }
}

最小改动方案(不改变原有代码结构)

如果不想调整原有代码框架,仅修改以下点位即可:

  1. 在loadNames方法中添加循环读取所有行,将姓名存入动态列表,不要固定数组长度为2
  2. 在loadMarks方法中添加循环读取所有行,提取对应分数字段,不要仅读取第一行
  3. 在outputMarks方法中,循环判断条件改为数组的Length属性,不要硬编码固定数值2、6

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 13:06:03