-2

問題の種類、章、ポイント数、問題と答えを含む問題プールであるファイルを読み込んでいます。このコードのビットは、(ユーザー入力からの) 最小チャプターと最大チャプターが (未知のサイズのファイルからの) 範囲内にあるかどうかを確認するためにチェックしています。ベクトルの最後に余分な行が追加され、エラーが発生していることはわかっていますが、どうすれば修正できますか? コードは次のとおりです。

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();
}
4

2 に答える 2

0
void checker(int min, int max, string file) {

    ifstream myfile;
    string line;
    vector<int> numlist;

    myfile.open(file);
    while (!myfile.eof()) {
        if (!getline(myfile, line)) {
            break;
        } else if(line!="") {
            vector<string> chap = split_string(line);
            int chapter = str2int(chap[2]);
            numlist.push_back(chapter);
        }
    }
//other code cut out because it was not important

課題でこのコードを提出したところ、うまくいきました! chap[2] は、読み込まれたファイルからの行の 3 番目の要素です。ファイルには、(他の関数やクラスの助けを借りて) 独自のベクトルに変換された多くの行があります。しかし、各ベクトルの 3 番目の要素 (ファイルから読み込まれた行) は、章番号 (chap[2]) である番号でした。これで、chap[2]が犯人ではないことが証明されました。ファイルの行のサンプルを次に示します: short@1@10@継承において、「親」クラスを表す専門用語は何ですか?

于 2013-11-13T05:02:08.327 に答える