Я пытаюсь выяснить, как альтернативно проверить, является ли указатель в массиве в настоящее время NULL, и выполнить цикл.В тот момент, если содержимое этой части массива будет удалено, при циклировании будет выдано сообщение об ошибке.
Этот массив инициализирован:
Student *classRosterArray[5] = { nullptr, nullptr, nullptr, nullptr, nullptr };
Цикл
void Roster::add(string studentID, string firstName, string lastName, string email, int age, int daysInCourse1, int daysInCourse2, int daysInCourse3, Degree degreeProgram)
{
int courseDaysin[3] = { daysInCourse1, daysInCourse2, daysInCourse3 };
for (int i = 0; i < sizeof(classRosterArray) / sizeof(classRosterArray[i]); i++) {
if (classRosterArray[i] == nullptr) {
if (degreeProgram == NETWORKING) {
classRosterArray[i] = new NetworkStudent(age, courseDaysin, studentID, email, firstName, lastName, degreeProgram);
}
else if (degreeProgram == SECURITY) {
classRosterArray[i] = new SecurityStudent(age, courseDaysin, studentID, email, firstName, lastName, degreeProgram);
}
else if (degreeProgram == SOFTWARE) {
classRosterArray[i] = new SoftwareStudent(age, courseDaysin, studentID, email, firstName, lastName, degreeProgram);
}
else {
classRosterArray[i] = new Student(age, courseDaysin, studentID, email, firstName, lastName, degreeProgram);
}
break;//stop
}
}
}
Когда удалено:
void Roster::remove(string studentID)
{
bool studentRemoved = false;
for (int i = 0; i < sizeof(classRosterArray) / sizeof(classRosterArray[i]); i++) {
if (classRosterArray[i] != nullptr && classRosterArray[i]->fetchStudentId() == studentID) {
classRosterArray[i] = nullptr;
studentRemoved = true;
break;
}
}
if (studentRemoved == false) {
cout << "ERROR: Student ID '" << studentID << "' was not found.";
}
}
Отредактировано, чтобы добавить следующие фрагменты кода с ранее предложенными изменениями, как мне следует изменить следующее теперь, когда я использую карту вместо своегооригинальный массив.Спасибо за помощь, ребята!
void Roster::printAll()
{
for (int i = 0; i < sizeof(classRosterArray) / sizeof(classRosterArray[i]); i++) {
classRosterArray[i]->print();
}
}
void Roster::printByDegreeProgram(int degreeProgram)
{
for (int i = 0; i < sizeof(classRosterArray) / sizeof(classRosterArray[i]); i++) {
if (classRosterArray[i]->fetchDegreeProgram() == degreeProgram) {
classRosterArray[i]->print();
}
}
}
void Roster::printDaysInCourse(string studentID)
{
float avg = 0;
int max = 3;
for (int i = 0; i < sizeof(classRosterArray) / sizeof(classRosterArray[i]); i++) {
if (classRosterArray[i] != nullptr && classRosterArray[i]->fetchStudentId() == studentID) {
int *daysInCourse = classRosterArray[i]->fetchDaysInCourse();
for (int x = 0; x < max; x++) {
avg += daysInCourse[x];
}
cout << "Student " << classRosterArray[i]->fetchStudentId() << "'s average number of days in each course is." << (avg / max) << "\n";
break;
}
}
}
void Roster::printInvalidEmails()
{
for (int i = 0; i < sizeof(classRosterArray) / sizeof(classRosterArray[i]); i++) {
string email = classRosterArray[email]->fetchEmail();
bool isValid = false;
size_t found = email.find("@");
if (found != string::npos) {
found = email.find(".");
if (found != string::npos) {
found = email.find(" ");
if (found == string::npos) {
isValid = true;
}
}
}
if (!isValid) {
cout << email << " is not a valid email address \n";
}
}
}