C++ C++;传递变量的结构问题

C++ C++;传递变量的结构问题,c++,arrays,object,structure,C++,Arrays,Object,Structure,这项作业要求我创建一个程序,接收学生信息、名字、姓氏和考试成绩。然后我必须指定正确的字母等级。然后,我必须以最高分数输出学生的姓名。除了最高等级的零件外,其他零件都能正常工作。我知道这是我的“max”变量没有从findmax函数更新的问题。我只是不知道为什么 #include <iostream> #include <string> #include <iomanip> using namespace std; struct studentType {

这项作业要求我创建一个程序,接收学生信息、名字、姓氏和考试成绩。然后我必须指定正确的字母等级。然后,我必须以最高分数输出学生的姓名。除了最高等级的零件外,其他零件都能正常工作。我知道这是我的“max”变量没有从findmax函数更新的问题。我只是不知道为什么

#include <iostream>
#include <string>
#include <iomanip>
using namespace std;

struct studentType {
    string studentFName;
    string studentLName;
    int testscore;
    char grade;
};
void getdata(studentType student[]);
void assignment(studentType student[]);
int findmax(studentType student[]);
void print(studentType student[], int max);

int main() {
    int max = 0;
    studentType student[3];
    getdata(student);
    assignment(student);
    findmax(student);
    print(student, max);
}

void getdata(studentType student[]) {
    for (int i = 0; i < 3; i++) {
        cout << "Enter Student First Name: " << endl;
        cin >> student[i].studentFName;
        cout << "Enter Student Last Name: " << endl;
        cin >> student[i].studentLName;
        cout << "Enter Student test score: " << endl;
        cin >> student[i].testscore;
        while (student[i].testscore > 100 || student[i].testscore < 0) {
            cout << "Please input a valid score in the range 0-100" << endl;
            cin >> student[i].testscore;
        }
    }
}
void assignment(studentType student[]) {
    for (int i = 0; i < 3; i++) {
        if (student[i].testscore >= 90 && student[i].testscore <= 100)
            student[i].grade = 'A';
        else if (student[i].testscore >= 80 && student[i].testscore < 90)
            student[i].grade = 'B';
        else if (student[i].testscore >= 70 && student[i].testscore < 80)
            student[i].grade = 'C';
        else if (student[i].testscore >= 60 && student[i].testscore < 70)
            student[i].grade = 'D';
        else if (student[i].testscore < 60)
            student[i].grade = 'F';
    }
    for (int j = 0; j < 3; j++)
        cout << student[j].studentLName << ", "<< setw(10) << student[j].studentFName << ", " << setw(10) << student[j].testscore << endl;
}

int findmax(studentType student[]) {
    int max = 0;
    for (int i = 0; i < 3; i++) {
        if (student[i].testscore > student[i - 1].testscore)
            max = student[i].testscore;
    }
    
    return max;
}


void print(studentType student[], int max) {
    for (int i = 0; i < 3; i++) {
        if (max == student[i].testscore)
            cout << student[i].studentFName << " " << student[i].studentLName << " had the highest score with " << student[i].testscore;

        }
    }
#包括
#包括
#包括
使用名称空间std;
结构studentType{
字符串studentFName;
字符串studentLName;
int测试分数;
煤焦品位;
};
void getdata(studentType student[]);
无效作业(studentType student[]);
int findmax(studentType student[]);
无效打印(studentType student[],int max);
int main(){
int max=0;
学生型学生[3];
获取数据(学生);
作业(学生);
findmax(学生);
打印(学生,最大);
}
void getdata(studentType student[]{
对于(int i=0;i<3;i++){
cout student[i]。studentFName;
cout student[i].学生名称;
考学生[i]。考试成绩;
while(学生[i]。测试分数>100 | |学生[i]。测试分数<0){
考学生[i]。考试成绩;
}
}
}
无效作业(学生类型学生[]){
对于(int i=0;i<3;i++){
如果(学生[i].testscore>=90&&student[i].testscore=80&&student[i].testscore<90)
学生[i]。成绩='B';
如果(学生[i].testscore>=70&&student[i].testscore<80),则为else
学生[i]。成绩='C';
如果(学生[i].testscore>=60&&student[i].testscore<70),则为else
学生[i]。成绩='D';
else if(学生[i]。测试分数<60)
学生[i]。成绩='F';
}
对于(int j=0;j<3;j++)
cout您的
findmax()
函数错误。您正在相互比较学生成绩,而不是比较
max
变量。请尝试以下操作:

int findmax(studentType student[]{
int max=0;
对于(int i=0;i<3;i++){
如果(学生[i].testscore>max)
max=学生[i]。测试分数;
}    
返回最大值;
}
或者:

int findmax(studentType student[]{
int max=学生[0]。测试分数;
对于(int i=1;i<3;i++){
如果(学生[i].testscore>max)
max=学生[i]。测试分数;
}    
返回最大值;
}
无论哪种方式,您的
main()
都会忽略返回的值。您需要这样做:

intmain(){
学生型学生[3];
获取数据(学生);
作业(学生);
int max=findmax(学生);
打印(学生,最大);
}

就我个人而言,我会更改
findmax()
以返回索引而不是分数,然后在
print()
中完全消除循环,例如:

struct studentType{
字符串studentFName;
字符串studentLName;
int测试分数;
煤焦品位;
};
静态常数int=3;
void getdata(studentType students[]);
无效作业(学生类型学生[]);
int findmax(studentType students[]);
void printMax(studentType和student);
int main(){
学生型学生[MaxStudents];
获取数据(学生);
作业(学生);
int index=findmax(学生);
printMax(学生[索引]);
}
void getdata(studentType students[]{
对于(int i=0;i100 | |学生[i]。测试分数<0){
考学生[i].考试成绩;
}
}
}
无效作业(学生类型学生[]){
对于(int i=0;i=90)
学生[i]。成绩='A';
否则如果(学生[i]。测试分数>=80)
学生[i]。成绩='B';
否则如果(学生[i]。测试分数>=70)
学生[i]。成绩='C';
否则如果(学生[i]。测试分数>=60)
学生[i]。成绩='D';
其他的
学生[i]。成绩='F';
}
对于(int j=0;j非常感谢。我没有意识到主函数中的错误。非常感谢findmax()这个代码是可以运行的,我不想成为那个告诉你他们会做不同的人。如果你只想通过你的课程,获得信用并留下C++,那么一切都很好。这只是你似乎在二十年前使用C++……例如,固定长度数组,当STD::向量是这个CEN。在大多数情况下,tury的选择。啊,好吧。我们的课程中还没有涉及向量,所以这就是为什么我用这种技术来处理它。不过谢谢你的提示。