该程序没有正确显示相应的字母格栅

The program does not show the corresponding letters grates correctly

这个程序要求学生的分数,然后它应该为每个年级和平均价格给出相应的字母。问题是:代码只给我最后一个等级的字母等级。无法弄清楚如何解决它。有人可以帮我导航吗?

#include <iostream>
    using namespace std;
    char *calcGrade(const int *, int);
    int main()
    {
        char *letterScores = nullptr;
        double *average1 = nullptr;
        
        const int size= 6;
        int *studentScore = nullptr;    // To dynamically allocate an array
        double total = 0.0;             // Accumulator
        double average;                 // To hold average sales
        int count;
           studentScore = new int[size];
            cout << "Enter the student's score" << endl;
            for (count = 0; count < size; count++)
        {
            cout << "Student " << (count + 1) << ": ";
            cin >> studentScore[count];
            while ((studentScore[count] <=0) || (studentScore[count] > 100))
            {
            cout << "Zero or negative numbers and higher 100 not accepted.\n";
            cout << "Test Score #" << (count + 1) << ": ";
            cin >> studentScore[count];
            }
            
            letterScores = calcGrade(studentScore, size);
        }
        for (int count = 0; count < size; count++)
        {
          cout << "Student " << (count + 1) << ": ";
          cout << studentScore[count] << " "<< letterScores[count]  << endl; 
          }  
        cout << "This is average score " << *average1 << endl;
        return 0;
    }
    char *calcGrade(const int *stScore, int size){
        char *arr = nullptr;
        arr = new char[size];
        char letterGrade; 
        for (int count = 0; count < size; count++)
        if      ((stScore[count] > 90) && (stScore[count] <= 100))
            letterGrade = 'A';
        else if (stScore[count] > 80 && stScore[count] <= 90)
            letterGrade = 'B';
        else if (stScore[count] > 70 && stScore[count] <= 80)
            letterGrade = 'C'; 
        else if (stScore[count] > 60 && stScore[count] <= 70)
            letterGrade = 'D';
        else if (stScore[count] >= 0 && stScore[count] <= 60)
            letterGrade = 'F'; 
        else{  
            cout << "Logic error." << endl;
            
        }
            for (int count = 0; count < size; count++)
            {
              arr[count] = stScore[count];  
              arr[count] = letterGrade;
              }
           return arr;
        } 
    ```

在每个循环中执行此操作:

letterScores = calcGrade(studentScore, size);

这意味着每次你 运行 它时,letterScores 指向最近学生的分数,并且你已经排除了所有以前的学生。

您可以将数据存储在 std::vector 中,然后遍历向量,转储每个数据。

您的 calcGrade 函数有两个问题:

  1. 您为每个学生计算了正确的字母等级,然后您尝试存储所有这些。但是您需要在计算时存储每一个。 calcGrade.

    中不应有两个 for 循环
  2. 我不知道你怎么想的,但是第二行覆盖了第一行,导致第一行什么都不做:

           arr[count] = stScore[count];  
           arr[count] = letterGrade;
    
#include <iostream>
    using namespace std;
    char *calcGrade(const int *, int);
    int main()
    {
        char *letterScores = nullptr;
        double *average1 = nullptr;
        
        const int size= 6;
        int *studentScore = nullptr;    // To dynamically allocate an array
        double total = 0.0;             // Accumulator
        double average;                 // To hold average sales
        int count;
           studentScore = new int[size];
            cout << "Enter the student's score" << endl;
            for (count = 0; count < size; count++)
        {
            cout << "Student " << (count + 1) << ": ";
            cin >> studentScore[count];
            while ((studentScore[count] <=0) || (studentScore[count] > 100))
            {
            cout << "Zero or negative numbers and higher 100 not accepted.\n";
            cout << "Test Score #" << (count + 1) << ": ";
            cin >> studentScore[count];
            }
            
            letterScores = calcGrade(studentScore, size);
        }
        for (int count = 0; count < size; count++)
        {
          cout << "Student " << (count + 1) << ": ";
          cout << studentScore[count] << " "<< letterScores[count]  << endl; 
          }  
        cout << "This is average score " << *average1 << endl;
        return 0;
    }
    char *calcGrade(const int *stScore, int size){
        char *arr = nullptr;
        arr = new char[size];
        char letterGrade; 
        for (int count = 0; count < size; count++){
        if      ((stScore[count] > 90) && (stScore[count] <= 100))
            letterGrade = 'A';
        else if (stScore[count] > 80 && stScore[count] <= 90)
            letterGrade = 'B';
        else if (stScore[count] > 70 && stScore[count] <= 80)
            letterGrade = 'C'; 
        else if (stScore[count] > 60 && stScore[count] <= 70)
            letterGrade = 'D';
        else if (stScore[count] >= 0 && stScore[count] <= 60)
            letterGrade = 'F'; 
        else  cout << "Logic error." << endl;
            arr[count] = letterGrade;
        }    
            return arr;
        }