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;
}