以下仅个人意见,其实你考虑的已经很周全了:
你的代码有个小瑕疵:
当学员成绩认为输入字符(转不成int),再输入任意键就自动退出了,没有做到继续判断循环.
以下是我的方法,不敢说比楼主更好,大家互相学习:- using System;
- namespace test45
- {
- internal class Program
- {
- private static void Main(string[] args)
- {
- Console.WriteLine("请输入班级人数: ");
- var num = GetNum(false); //获取班级人数 false:班级人数 true:学生分数
- var i = 1;
- var sum = 0; //总分
- while (i <= num) //根据班级个数循环
- {
- Console.WriteLine("请输入第{0}位学生的成绩: ", i);
- var score = GetNum(true); //获取学生分数 false:班级人数 true:学生分数
- sum += score;
- i++;
- }
- Console.WriteLine("学员的平均成绩为{0},总成绩为{1}", sum / num, sum);
- Console.ReadKey();
- }
- /// <summary>
- /// 验证用户输入且自动循环
- /// </summary>
- /// <param name="isScore">true 分数 false 班级人数</param>
- /// <returns>数字</returns>
- public static int GetNum(bool isScore)
- {
- do
- {
- try
- {
- var number = Convert.ToInt32(Console.ReadLine());
- if (!isScore || (number >= 0 && number <= 100)) return number; //分数0-100之间
- Console.WriteLine("您输入的分数有误,请重新输入该名学生分数!");
- }
- catch //转不成int的时候
- {
- Console.WriteLine(isScore ? "您输入的分数有误,请重新输入该名学生分数!" : "您输入的班级人数有误,请重新输入!");
- }
- } while (true);
- }
- }
- }
复制代码 说明:1.将获取int的方法单独提出
需求中有两处获取int,其一是班级人数,其二是学生分数.因为有两处所以定义一个变量isScore来区分当isScore=true时是要得到一个分数,当为false时是要获取班级人数
2.GetNum方法中不仅做了数字的验证,还可以实现如果输入不合理自动循环
3.主方法中仅需调用GetNum就好,无需再考虑用户输入不合理要做的事情,因为都已经交给GetNum了
4.Console.WriteLine("请输入第{0}位学生的成绩: ", i);这句可以清晰让用户知道,他当前正输入的是哪位学生的成绩.
代码也刚刚写好,如果测试有问题,还请交流学习...
|