Программа, которую мне поручили написать, предназначена для сбора информации о студентах. Это очень просто, но в инструкциях я не указал количество учеников (не проблема) или количество тестов на одного ученика (задача). Мне приказано создать указатель на структуру и создать массив двойных указателей для каждого ученика. Я это сделал.
Но каждый раз, когда я пытаюсь ввести результаты тестов для студентов, моя программа падает. Я пробовал studentData->testscores в моей функции enterData(), я пробовал 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;
}
for
, поэтому цикл даже не выполняется... 16.02.2014