我正在創建一個程序,它接收學生ID,姓名和考試分數,並根據可能分數和相對權重的其他輸入計算他們收到的總分數。從那裏,用戶將輸入切點集,以準確地說出A,B,C,D,F行的位置。例如,如果B分割點集合爲20.0,A分割點爲90.0,則90至20之間的任何內容都將獲得等級B.動態分配的數組只顯示最後的結果
要實現此目的,我創建了一個名爲Cutpoints的結構,這個。
struct Cutpoints {
double a;
double b;
double c;
double d;
};
含有大約學生的一切,我創建了一個名爲學生爲他們的結構:
struct Student {
int id; // student ID
char gradeOption; // either G or P
double totalScore;
std::string studentName;
int* rawScores = NULL; // array that holds raw scores for a student
std::string* finalGrade; // final grade given in course
};
我遇到的問題是我的最終成績輸出。用戶輸入他們想要的分割點數量,然後輸入實際的分割點。假設用戶輸入兩行cutpoints。我最終得到這樣的輸出:
2
85.0 75.0 65.0 55.0
80.0 70.0 60.0 50.0
TOTAL SCORES
123 Alex Thornton 79.1
234 Boo Thornton 100
345 Jane Student 92
456 Joe Student 72.4
567 Too-Many Courses 30.8
CUTPOINT SET 1
123 Alex Thornton
234 Boo Thornton
345 Jane Student
456 Joe Student
567 Too-Many Courses
CUTPOINT SET 2
123 Alex Thornton B
234 Boo Thornton A
345 Jane Student A
456 Joe Student P
567 Too-Many Courses F
總分值沒有問題輸出和最後截點的最終成績將輸出正確的,但在此之前所有的切點也不會輸出最終的成績。我試圖用cout進行調試,然後嘗試跟蹤問題,但我無法弄清楚發生了什麼問題。下面是與最後的成績特別工作代碼:
void outputFinalGrade(int numOfStudents, int cutpointAmount, Cutpoints* cut, Student* students) {
for(int i = 0; i < cutpointAmount; i++) {
inputCutpoint(i, cut); // get user input for the current set of cutpoints
getFinalGrade(cutpointAmount, cut, students, numOfStudents);
/* OUTPUT */
std::cout << "CUTPOINT SET " << (i + 1) << std::endl;
for(int j = 0; j < numOfStudents; j++) { // print all students
std::cout << students[j].id << students[j].studentName << " " << students[j].finalGrade[i] << std::endl;
} // end inner for (display students)
} // end outer for
} // end outputFinalGrade
// input cutpoints
void inputCutpoint(int cutpointNumber, Cutpoints* cut) {
// user inputs cutpoints
std::cin >> cut[cutpointNumber].a >> cut[cutpointNumber].b >> cut[cutpointNumber].c >> cut[cutpointNumber].d;
}
這裏是我的(礙眼)方法應該最終成績存入靠的是在切點是什麼位置的正確陣列位置:
而不是指針和新的,使用'std :: vector'來創建數組,因爲它更安全和更容易。爲了避免代碼重複,如何分割點而不是單獨列出每個成員?然後,您可以循環切入點,直到找到合適的點。 – 2014-11-07 01:56:44
@NeilKirk不幸的是,我們不允許使用矢量。 :/我們必須使用動態分配的數組。 – Alex 2014-11-07 02:01:23
有些東西是可疑的getFinalGrade;你在一個只能看到'j'的循環內設置'finalGrade [j]'一次。每次在'j'循環中,你都會爲每個'students [i] .finalGrade'分配新的內存,這會丟失你在'j'循環的前幾次迭代中設置的所有內存。 – 2014-11-07 02:34:03