我被指示編寫的程序是收集學生信息。這是非常基本的,但在說明中,我沒有學生人數(沒有問題)或每個學生的測試次數(問題)。我被指示創建一個指向結構的指針併爲每個學生創建一個雙指針數組。我做到了。當輸入到結構點處的雙指針數組時,程序崩潰
但是,每當我嘗試輸入學生的考試成績時,我的程序就會崩潰。我在我的enterData()函數中試過studentData-> testscores,我試過了studentData [i] .testScores [j],* studentData-> testScores,但似乎沒有任何工作。
有人請指出我的方向是正確的。
#include <iostream>
#include <string>
#include <iomanip>
using namespace std;
struct StudentInfo
{
string name;
string idNum;
double* testScores;
double average;
char grade;
};
StudentInfo enterData(StudentInfo*, int, int);//Add data to the student
//void displayData(StudentInfo*, int);//Display the student info and grade
int main()
{
int numStudents;
int numTests;
cout << "Enter the amount of students to input: ";
cin >> numStudents;
cin.ignore();
cout << "Enter the number of test scores per students: ";
cin >> numTests;
cin.ignore();
StudentInfo* studentData = new StudentInfo[numStudents];
for(int i = 0; i < numStudents; i++);
{
studentData->testScores = new double[numTests];
studentData++;
}
//Let the user enter students information
enterData(studentData, numStudents, numTests);
return 0;
}
//*************************
//define enterData function
//*************************
StudentInfo enterData(StudentInfo* studentData, int numStudents, int numTests)
{
int testTotal = 0; //Keep a total of the tests.
double testScore; //Variable to hold user input of test score.
for(int i = 0; i < numStudents; i++)
{
cout << "\n\nPlease enter data for Student #" << i + 1;
cout << "\n-------------------------------------\n";
cout << "\nName: ";
getline(cin, studentData[i].name);
while(studentData[i].name.empty())
{
cout << "Oops! You didn't enter the students's name!" << endl;
cout << "Please enter customer's name: ";
getline (cin, studentData[i].name);
}
//Get Student's Id Number
cout << "ID Number: ";
getline(cin, studentData[i].idNum);
while(studentData[i].idNum.empty())
{
cout << "Oops! You didn't enter the students's ID Number!" << endl;
cout << "Please enter student's ID Number: ";
getline (cin, studentData[i].idNum);
}
//Get Student's Test Scores
cout << "Enter Test Scores for Student #" << i + 1 << endl;
for (int j = 0; j < numTests; j++)
{
cout << "Test #" << j + 1 << ": ";
cin >> testScore;
cin.ignore();
studentData[i].testScores[j] = testScore;
testTotal += testScore;
}
//Save Students Average
cout << fixed << setprecision(2);
cout << "Student's Average: " << testTotal/numTests;
studentData[i].average = testTotal/numTests;
//Save Students Grade
if(studentData[i].average > 90)
studentData[i].grade = 'A';
else if(studentData[i].average > 80)
studentData[i].grade = 'B';
else if(studentData[i].average > 70)
studentData[i].grade = 'C';
else if(studentData[i].average > 60)
studentData[i].grade = 'D';
else
studentData[i].grade = 'F';
cout << "Student's Grade: " << studentData[i].grade << endl;
}
return *studentData;
}
清理代碼:刪除與您的問題無關的部分,並測試它是否重現了問題。 –