C#课程作业问题:成绩列表统计功能报错求助
修正后的C#成绩统计程序
internal class Program { public static void YourGrades() { List<int> gradesList = new List<int>(); Console.WriteLine("Write a grade (0-5), press Enter to finish:"); while (true) { string input = Console.ReadLine(); // 空输入时退出循环 if (string.IsNullOrWhiteSpace(input)) break; // 尝试解析输入为整数,并验证范围 if (int.TryParse(input, out int grade) && grade >= 0 && grade <= 5) { gradesList.Add(grade); } else { Console.WriteLine("Invalid input! Please enter a number between 0 and 5."); } } // 处理统计逻辑 if (gradesList.Count == 0) { Console.WriteLine("No grades were entered."); return; } int totalGrades = gradesList.Count; double average = gradesList.Average(); Console.WriteLine($"The average of your {totalGrades} grades is {average:F2}."); } static void Main(string[] args) { YourGrades(); } }
原代码核心问题及修正说明
- 无限循环问题:原循环未在每次迭代后读取新输入,导致一旦进入循环就会无限执行添加操作。修正后改用
while(true)循环,每次迭代都读取新输入,空输入时直接跳出循环。 - 空字符串解析错误:原代码在输入为空时仍尝试解析为整数,会抛出
FormatException。修正后先判断空输入,直接退出循环,避免无效解析。 - 类型错误调用方法:原代码将单个整数
num当作集合调用Average()和Length,这两个方法属于List<int>这类集合类型。修正后直接使用gradesList.Count获取成绩数量,gradesList.Average()计算平均分。 - 输入验证缺失:原代码未验证输入是否在0-5范围内,修正后添加范围判断,非法输入时提示用户重新输入。
- 类型不匹配问题:原代码将
Average()返回的double类型结果赋值给string变量,修正后使用double类型接收,并通过{average:F2}格式化输出两位小数。
内容的提问来源于stack exchange,提问作者Uuno Purhaturo
相关产品推荐
相关产品推荐

