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

C#程序平均成绩字母等级错误、哨兵值大小写不敏感实现问题求助

C#成绩统计程序问题修复方案

问题1:平均成绩等级与最后一次输入等级一致

你的猜测完全正确,问题确实出在共用了全局的grade字符串变量。

  • 原因:每次输入单条成绩时,你都会将grade覆盖为当前成绩对应的等级,循环结束后grade存储的永远是最后一次输入成绩的等级。你在计算平均成绩后并没有重新调用DetermineGrade方法计算平均分数对应的等级,直接复用了旧的grade值,所以才会出现平均等级和最后一次输入等级完全一致的问题。
  • 修复方案:
    • 将单次成绩对应的等级改为局部变量,避免污染全局变量
    • 计算平均成绩后,将平均值转换为整数,调用DetermineGrade单独计算平均分数对应的等级再输出

问题2:哨兵值大小写不敏感匹配及ToLower()报错

  • 报错原因:你遇到的CS0019错误是因为调用ToLower方法时遗漏了方法必需的括号(),编译器会把没有括号的ToLower识别为方法组(方法本身的引用),而不是调用方法后返回的小写字符串,自然不能直接和字符串做相等判断。
  • 正确实现:所有判断哨兵值的位置,都将输入字符串转小写后和小写的quit匹配,写法为entry.ToLower() == "quit"。注意需要同时修改Main方法和GetEntry方法中的两处哨兵判断逻辑,否则大小写不敏感不会生效。

修复后的完整代码

using System;
class Program {
  public static void Main (string[] args) {
    int sum=0;
    int count = 0;
    bool KeepGoing = true;
      
    while (KeepGoing){
      string entry = GetEntry();
      if (entry.ToLower() == "quit") {
        KeepGoing = false;
      } else {
        int anInt = Convert.ToInt32(entry);
        // 单次成绩等级用局部变量,避免全局变量污染
        string singleGrade = DetermineGrade(anInt);
        sum += anInt;
        count++;

        Console.WriteLine("A grade of {0} is a(n) {1}", anInt, singleGrade);
      }
    }
    double average = sum/ (double)count;
    // 单独计算平均成绩对应的等级
    int averageRounded = Convert.ToInt32(average);
    string averageGrade = DetermineGrade(averageRounded);
    Console.WriteLine("The average is {0} is a(n) {1}", average, averageGrade);
  }
  
  public static string DetermineGrade(int anInt) {
    if (anInt >= 90){
      return "A";            
    }
    // 原代码用的按位与&改为逻辑与&&,更符合条件判断的使用场景
    if (anInt >= 80 && anInt <= 89){
      return "B";    
    }
    if (anInt >= 70 && anInt <= 79){
      return "C";
    }
    if (anInt >= 60 && anInt <= 69){
      return "D";
    } else{
      return "F"; 
    }
  }
 
  public static string GetEntry() {
    while (true){
      Console.WriteLine("Please enter your grade or enter Quit to end program.");
      string entry = Console.ReadLine();
      if (entry.ToLower() == "quit"){
        return entry;
      }
      int anInt;
      if (Int32.TryParse (entry, out anInt)) {
        if (anInt>= 0 && anInt <= 100) {
          return entry;
        } else {
          Console.WriteLine("Error: Please enter a valid integer between 0 and 100!");
        }
      } else {
        Console.WriteLine("Error: Please enter a valid number or Quit to exit!");
      }
    }
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 23:45:03