C++ 程序无法正确显示相应的字母grates

C++ 程序无法正确显示相应的字母grates,c++,pointers,reference,C++,Pointers,Reference,这个程序要求学生的分数,然后它应该给每个年级和平均价格相应的字母。问题是:代码只给我最后一个等级的字母等级。我想不出怎么修理它。谁能帮我导航一下吗 #include <iostream> using namespace std; char *calcGrade(const int *, int); int main() { char *letterScores = nullptr; double *average1 =

这个程序要求学生的分数,然后它应该给每个年级和平均价格相应的字母。问题是:代码只给我最后一个等级的字母等级。我想不出怎么修理它。谁能帮我导航一下吗

#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;
        } 
    ```
#包括
使用名称空间std;
字符*计算等级(常数整数*,整数);
int main()
{
char*letterScores=nullptr;
double*average1=nullptr;
常数int size=6;
int*studentScore=nullptr;//动态分配数组
双倍总计=0.0;//累加器
双倍平均;//保持平均销售额
整数计数;
学生分数=新整数[大小];

您是否可以在每个循环中执行此操作:

letterScores = calcGrade(studentScore, size);
也就是说,每次你运行它时,letterScores都会指向最近一个学生的分数,并且你已经把以前的学生都赶出去了


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

您的
calcGrade
函数有两种中断方式:

  • 您为每个学生计算正确的字母等级,然后尝试存储所有字母等级。但您需要在计算时存储每个字母等级。在
    calcGrade
    中,不应有两个
    for
    循环

  • 我不知道你怎么想,但第二行覆盖了第一行,导致第一行什么也不做:

           arr[count] = stScore[count];  
           arr[count] = letterGrade;
    
  • #包括
    使用名称空间std;
    字符*计算等级(常数整数*,整数);
    int main()
    {
    char*letterScores=nullptr;
    double*average1=nullptr;
    常数int size=6;
    int*studentScore=nullptr;//动态分配数组
    双倍总计=0.0;//累加器
    双倍平均;//保持平均销售额
    整数计数;
    学生分数=新整数[大小];
    
    是的,这就是这个程序所做的。你知道它为什么这样做吗?我想我弄乱了studentScore指针letterScores=calcGrade(studentScore,size);你能在没有计算机的情况下用纸和笔自己运行这个程序吗?另一个发现这个问题的有用工具是调试器实用程序。现在几乎每个开发环境都有一个调试器实用程序,所以你可能已经有了。有了调试器,你可以一步一步地运行这个程序,如果你需要那么好的调试器下雨时,仔细观察程序的运行情况。一旦你看到程序执行了一些意想不到的操作,比如走错了路径或存储了错误的值,你就发现了一个错误。这或你的预期都是错误的。这两种情况都需要纠正。35; user253751我编辑了代码。使其更加精确,现在它也可以在计算机上运行了。他asn没有扔掉任何东西。每次,它都会计算所有输入的学生的分数。它效率不高,而且会泄漏内存,但这不是问题。约瑟夫·拉森感谢你的回答。std::vector有问题,我还没有学会,在这个编程作业中,我不允许使用vector。无论如何,谢谢你带我去厕所k并尝试解决问题。我是堆栈溢出新手。这是我使用它的第二天。这里的社区似乎非常友好,非常有用。David Schwartz感谢你的评论。这帮了大忙。我删除了第二个for loop,编辑了第一个for loop。确切地说,我使用了“if else”逻辑,并用花括号括起来,第一个for循环,现在代码为每个学生显示正确的分数。
    #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;
            }