You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

C#学生成绩录入代码异常:多学生时成绩输入次数超出预期

修复C#学生成绩录入的循环问题

嘿,这个问题我之前也碰到过——大概率是循环嵌套的逻辑顺序搞反了,或者内层循环的次数控制错了。咱们一步步来解决:

问题到底出在哪?

正常的录入逻辑应该是:

  1. 先问清楚有多少个学生
  2. 对每个学生(外层循环):
    • 输入他/她的姓名
    • 接着输入这个学生的5门科目成绩(内层循环,跑5次)
      如果你的代码把这两个循环的顺序搞反了(比如先循环5门科目,再循环每个学生),或者内层循环的次数写成了学生总数,那自然会出现输入次数不符合预期的情况。

修复后的完整代码

using System;

class StudentGradeEntry
{
    static void Main()
    {
        int totalStudents = 0;
        int gt50Count = 0; // 看你原代码里的变量,应该是统计成绩超过50分的次数?

        Console.WriteLine("How many students are there?");
        // 加个输入验证,防止用户瞎输非数字内容
        while (!int.TryParse(Console.ReadLine(), out totalStudents) || totalStudents <= 0)
        {
            Console.WriteLine("Come on, enter a valid positive number please!");
        }

        // 外层循环:逐个处理每个学生
        for (int studentIndex = 0; studentIndex < totalStudents; studentIndex++)
        {
            Console.WriteLine($"\n--- Student {studentIndex + 1} ---");
            Console.WriteLine("Enter student name:");
            string studentName = Console.ReadLine();

            // 内层循环:处理这个学生的5门成绩
            for (int subjectIndex = 0; subjectIndex < 5; subjectIndex++)
            {
                Console.WriteLine($"Enter score for Subject {subjectIndex + 1} ({studentName}):");
                // 同样验证成绩输入的有效性
                if (int.TryParse(Console.ReadLine(), out int score))
                {
                    // 这里处理你的统计逻辑,比如计数超过50分的情况
                    if (score > 50)
                    {
                        gt50Count++;
                    }
                }
                else
                {
                    Console.WriteLine("Oops, that's not a valid score. Try again.");
                    subjectIndex--; // 退一步,重新输入当前科目的成绩
                }
            }
        }

        // 最后输出统计结果
        Console.WriteLine("\n--- Final Stats ---");
        Console.WriteLine($"Total students: {totalStudents}");
        Console.WriteLine($"Number of scores above 50: {gt50Count}");
    }
}

核心修复要点

  • 循环顺序正确:外层循环控制学生数量,内层循环固定执行5次(对应5门科目),确保每个学生只需要输入5次成绩,流程符合直觉。
  • 输入验证:避免用户输入非数字内容导致程序直接崩溃,提升程序的稳定性。
  • 友好提示:明确告诉用户当前输入的是哪个学生的哪门科目,减少输入时的困惑。

为什么你的原代码会出错?

举个常见的错误写法例子,比如循环顺序颠倒了:

// 错误示例:先循环科目,再循环学生
for (int j = 0; j < 5; j++)
{
    Console.WriteLine($"--- Subject {j+1} ---");
    for (int i = 0; i < totalStudents; i++)
    {
        Console.WriteLine($"Enter score for Student {i+1}:");
        // 输入逻辑
    }
}

这种写法虽然总输入次数是对的(5学生数),但输入顺序是「所有学生先输第一门,再输第二门」,和你想要的「每个学生连续输完5门」的流程完全不符,体验上就会觉得“怎么一直在输成绩”。如果你的代码里内层循环的次数写成了学生总数而不是5,那每个学生就会被要求输入N次成绩(N是学生数),那2个学生的话就是22=4次,这也不符合需求。

按照上面的正确代码来写,就能完美解决你的问题啦!

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

火山引擎 最新活动