C#成绩转换程序输入90未进入case4,触发默认分支问题求助
问题根源
你写的switch逻辑完全搞反了判断逻辑:你让grade去匹配case 1、case 2这些固定值,但实际输入的成绩是60-100的数值,根本不可能等于1、2、3、4,所以不管输入90还是其他合法成绩,都会直接走到default分支输出错误提示。
修正方案
下面给两种可行的修正方式,同时优化了输入验证,避免非数字输入导致程序崩溃:
方式1:用switch范围模式(C# 7+推荐写法)
这种写法最简洁直观,直接在case里判断成绩范围:
using System; namespace GradeEquivalent { class Grades { static void Main(string[] args) { Console.WriteLine("Enter your grade: "); if (int.TryParse(Console.ReadLine(), out int grade)) { switch (grade) { case >= 60 and <= 69: Console.WriteLine("Grade equivalent: D"); break; case >= 70 and <= 79: Console.WriteLine("Grade equivalent: C"); break; case >= 80 and <= 89: Console.WriteLine("Grade equivalent: B"); break; case >= 90 and <= 100: Console.WriteLine("Grade equivalent: A"); break; default: Console.WriteLine("Invalid grade input."); break; } } else { Console.WriteLine("Please enter a valid integer grade."); } } } }
方式2:先分组再用switch(兼容低版本C#)
如果你的项目用的是C# 7以下版本,不支持范围模式,可以先把成绩转换成对应分组编号,再用switch匹配:
using System; namespace GradeEquivalent { class Grades { static void Main(string[] args) { Console.WriteLine("Enter your grade: "); int grade; if (int.TryParse(Console.ReadLine(), out grade)) { int gradeGroup = 0; if (grade >= 60 && grade <= 69) gradeGroup = 1; else if (grade >= 70 && grade <= 79) gradeGroup = 2; else if (grade >= 80 && grade <= 89) gradeGroup = 3; else if (grade >= 90 && grade <= 100) gradeGroup = 4; switch (gradeGroup) { case 1: Console.WriteLine("Grade equivalent: D"); break; case 2: Console.WriteLine("Grade equivalent: C"); break; case 3: Console.WriteLine("Grade equivalent: B"); break; case 4: Console.WriteLine("Grade equivalent: A"); break; default: Console.WriteLine("Invalid grade input."); break; } } else { Console.WriteLine("Please enter a valid integer grade."); } } } }
内容的提问来源于stack exchange,提问作者Hanny Lee
相关产品推荐
相关产品推荐

