Как вы думаете, что это делает?
if ((x == classes.size()))
x %= classes.size();
Назначение такое же, как:
x = x % classes.size();
Но вы только что узнали x == classes.size()
так
x = classes.size() % classes.size();
А для любого N
, N%N
равен нулю, что означает
if ((x == classes.size()))
x = 0;
Это то, что вы хотите?
Рассматриваемый if
способен работать только с классами, предлагаемыми только осенью. Возможно, вы хотели:
if ((semester & 1)? classes[x].spring(): classes[x].fall()) { ... }
Может быть, это будет работать?
int x = 0, semester = 0, scheduled = 0;
vector<string> completed;
while ((classes.size() > 0)) {
if (classes.size() == x) {
x = 0;
cout << "Checked all classes and scheduled " << scheduled << endl;
if (0 == scheduled) {
++semester;
completed = taken;
}
scheduled = 0;
}
if (prereq_taken(classes[x], completed)) {
if ((semester & 1)? classes[x].spring(): classes[x].fall()) {
if (credits[semester] + classes[x].credits() <= credits_per_semester) {
taken.push_back(classes[x].name());
out[semester].push_back(classes[x]);
credits[semester] += classes[x].credits();
cout << classes[x].name() << " will be taken in semester " << semester << " for " << classes[x].credits() << " credits" << endl;
classes.erase(classes.begin() + x);
scheduled++;
}
else {
cout << classes[x].name() << " can't be taken in semester " << semester << " : overload on credits" << endl;
x++;
}
}
else {
cout << classes[x].name() << " can't be taken in semester " << semester << " : not offered" << endl;
x++;
}
}
else {
cout << classes[x].name() << " can't be taken in semester " << semester << " : not offered" << endl;
x++; //
}
if (out[semester].size() >= classes_per_semester || credits[semester] >= credits_per_semester) {
cout << "Full load reached for semester " << semester << endl;
semester++;
completed = taken;
}
}