1

私はC++ でベクトルをpush_backすることを学んでいましたが、それを使用できる場所にたどり着きました。ただし、以下に貼り付けたコードは、ループが終了するたびに、ユーザーがループを続行するかどうかをユーザーに尋ねます。これは非常に不便であることがわかったので、ユーザーが入力 (「EXIT」) したときに for ループが中断されるようにコードを変更したいと考えました。この場合、コードをどのように変更する必要がありますか? for ループ以外の部分を変更する必要がある場合に備えて、コード全体を貼り付けました。

#define all student_marks.begin(), student_marks.end()

using namespace std;

int main()
{
    vector<double> student_marks; //create container

    double mark;
    char more_students = 'y'; //set default to yes ('y')

    while (more_students=='y' || more_students=='Y') {
        cout<<"Enter mark for student #"<<student_marks.size()+1<<":";
        cin>>mark; //enter mark

        student_marks.push_back(mark); //push_back

        cout<<"More students?(y/n)";
        cin>>more_students; //user selects to break or continue the loop
    }

    double sum = accumulate(all, 0.0), average = sum/student_marks.size(); //sum and ave

    cout<<endl
    <<"Total mark:\t\t"<<sum<<endl
    <<"Average mark:\t"<<average<<endl
    <<"Highest mark:\t"<<*max_element(all)<<endl
    <<"Lowest mark:\t"<<*min_element(all)<<endl<<endl;

    cout<<"-----Score list-----"<<endl;
    sort(all,greater<double>()); //sort list

    for (size_t i=0; i<student_marks.size(); i++)
        cout<<"#"<<i+1<<". "<<student_marks[i]<<endl; //outputs results as list



    return 0;
}
4

1 に答える 1

2

ユーザーが有効なマークを入力している限り、ループにとどまることができます。

cout << "Enter mark for student #1:"

while(cin >> mark) {
    students_marks.push_bak(mark);
    cout << "Enter mark for student #" << marks.size() + 1;
}

ユーザーがフラグdoubleなど、以外のものを入力するとすぐにループが終了します。EOF

于 2014-07-21T09:42:29.733 に答える