問題の種類、章、ポイント数、問題と答えを含む問題プールであるファイルを読み込んでいます。このコードのビットは、(ユーザー入力からの) 最小チャプターと最大チャプターが (未知のサイズのファイルからの) 範囲内にあるかどうかを確認するためにチェックしています。ベクトルの最後に余分な行が追加され、エラーが発生していることはわかっていますが、どうすれば修正できますか? コードは次のとおりです。
void checker(int min, int max, string file) {
ifstream myfile;
string line;
vector<int> numlist;
myfile.open(file);
while (myfile.is_open()) {
if (!getline(myfile, line)) {
break;
} else {
vector<string> chap = split_string(line);
int chapter = str2int(chap[2]);
numlist.push_back(chapter); //This is where the error is. Makes vector go out of range.
}
}
int small = 1000;
int large = 0;
for (size_t i = 0; i < numlist.size(); i++) {
if (numlist[i] < small) {
small = numlist[i];
}
}
for (size_t i = 0; i < numlist.size(); i++) {
if (numlist[i] > large) {
large = numlist[i];
}
}
if (min > max) {
cout
<< "Error: Please enter a number lower than or equal to the maximum chapter: "
<< endl;
cin >> min;
cout << endl;
} else if (min < small) {
cout
<< "Error: Please enter a number bigger than or equal than the minimum chapter ("
<< small << "): " << endl;
cin >> min;
cout << endl;
} else if (max > large) {
cout
<< "Error: Please enter a number bigger than or equal than the maximum chapter ("
<< large << "): " << endl;
cin >> max;
cout << endl;
}
myfile.close();
}