Я новичок в C++, но у меня хорошая ручка. Я пытаюсь взять список имен и оценок и найти самый большой. Все работает, за исключением того, что моя функция запускается каждый раз, когда я проверяю наивысшую оценку.Функция C++ работает, даже если это не так?
//Compares to find highest grade
void highestTest(studentType info[]){
int testValue, i;
testValue = 0;
i = 0;
for(i; i < 20; i++){
if(info[testValue].testScore < info[i].testScore){
testValue = i;
}
}
//Should run at the very end of the function
if(i == 20)
outPut(testValue, info);
}
void outPut(int highTest, studentType info[]){
cout << "The highest test score goes to " << info[highTest].studentFName << " " << info[highTest].studetnLName << " with a grade of " << info[highTest].testScore << endl;
cout << "~~~~~~~~~~~~~~~~~~Students~~~~~~~~~~~~~~~~~~~~~~~" << endl;
for(int i = 0; i < 20; i++){
cout << info[i].studetnLName << ", " << info[i].studentFName << info[i].grade << endl;
}
}
Остальная часть кода следующим образом, я знаю, что это не самый лучший способ сделать это, но я не позволил включить что-нибудь еще в основной и даны конкретные требования, как к какому типу функций.
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
struct studentType{
string studentFName;
string studetnLName;
int testScore;
char grade;
};
void fillArray(studentType info[]);
void labelGrades(studentType info[]);
void highestTest(studentType info[]);
void outPut(int highTest, studentType info[]);
string first[20] = {"student", "student", "student", "student", "student", "student", "student", "student", "student", "student", "student", "student", "student", "student", "student", "student", "student", "student", "student", "student"};
string last[20] = {"student", "student", "student", "student", "student", "student", "student", "student", "student", "student", "student", "student", "student", "student", "student", "student", "student", "student", "student", "student"};
int grades[20] = {97, 98, 96, 99, 86, 94, 88, 84, 85, 86, 89, 100, 84, 97, 91, 82, 92, 83, 89, 95};
studentType info[20];
int main() {
fillArray(info);
return 0;
}
void fillArray(studentType info[]){
for(int i = 0; i < 20; i++){
info[i].studentFName = first[i];
info[i].studetnLName = last[i];
info[i].testScore = grades[i];
}
labelGrades(info);
}
void labelGrades(studentType info[]){
int i = 0;
for(i; i < 20; i++){
if(info[i].testScore >= 90 && info[i].testScore <= 100){
info[i].grade = 'A';
highestTest(info);
}else if(info[i].testScore >= 80 && info[i].testScore <= 89)
info[i].grade = 'B';
else if(info[i].testScore >= 70 && info[i].testScore <= 79)
info[i].grade = 'C';
else if(info[i].testScore >= 60 && info[i].testScore <= 69)
info[i].grade = 'D';
else if(info[i].testScore <= 59)
info[i].grade = 'F';
else
cout << "An error occured please let the developer know" << endl;
}
}
Я изменил все имена (первый/последний), чтобы ученик не раскрывал одноклассников. Если кто-нибудь знает, почему void outPut запускается каждый раз, когда есть «A» и любые возможные исправления, которые были бы замечательными!
Исправлено форматирование кода только в ожидании экспертной оценки – Chad
Это будет всегда верно после завершения цикла: 'for (i; i <20; i ++) ... if (i == 20)' –