代码之家  ›  专栏  ›  技术社区  ›  nma

为什么是mycourses[i]。getGrade()不返回任何内容(C++)?

  •  -1
  • nma  · 技术社区  · 8 年前

    我遇到了头文件中的getGrade()函数无法根据用户在主文件中输入的标记返回字母等级的问题。当我编译和运行程序时,程序不会根据输入的分数显示字母等级。

    头文件(course.h)

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    class Course {
    private:
        int totalMarks;
        char grade;
    
    
    public:
        void marksInfo(int tm)
        {
            totalMarks = tm;
        }
    
        int getMarks(void)
        {
            return totalMarks;
        }
    
        void setGrade(char c)
        {
            if(totalMarks <= 39)
                c = 'E';
    
            if(totalMarks >= 40 && totalMarks <= 49)
                c = 'D';
    
            if(totalMarks >= 50 && totalMarks <= 64)
                c = 'C'
        }
    
        char getGrade(void)
        {
            return grade;
        }
     };
    

    主文件

     #include <iostream>
     #include <string>
     #include "course.h"
    
     using namespace std;
    
     int main()
       {
          int tm;
    
          Course course[5];
    
          for (int i = 0; i < 5; i++)
          {
              cout << "Subject #" << i+1 << endl;
    
              cout << "Total Marks #" << i+1 << ": ";
              cin >> tm;
    
              course[i].marksInfo(tm);
    
              cout << endl;
    
              course[i].getGrade();
          }
    
          cout << "Grade: " << course[0].getGrade();
      }
    
    1 回复  |  直到 8 年前
        1
  •  1
  •   kfsone    8 年前

    您的代码从未设置 grade 任何东西您在等待时也有问题:

    void setGrade(char c)
    {
        if(totalMarks <= 39)
            c = 'E';
    
        if(totalMarks >= 40 && totalMarks <= 49)
            c = 'D';
    
        if(totalMarks >= 50 && totalMarks <= 64)
            c = 'C'
    }
    

    此函数永不更改 等级 ,它所做的是填充 局部变量 使用基于totalMarks的值调用“C”,然后立即将其忘记。我想你想要的更多是这样的:

    class Course {
    private:
        int totalMarks;
        char grade;
    
    
    public:
        void marksInfo(int tm)
        {
            totalMarks = tm;
    
            if(totalMarks <= 39)
                grade = 'E';
            else if(totalMarks >= 40 && totalMarks <= 49)
                grade = 'D';
            else if(totalMarks >= 50 && totalMarks <= 64)
                grade = 'C';
            else if(totalMarks >= 65 && totalMarks <= 84)
                grade = 'B';
            else
                grade = 'A';
        }
    
        int getMarks(void)
        {
            return totalMarks;
        }
    
        char getGrade(void)
        {
            return grade;
        }
     };