Выход за пределы вектора

199
06 апреля 2018, 18:50

Имеется код:

struct orders {
    string product;
    string mark;
    string surname;
    string name;
    string secondName;
    string phoneNumber;
    int cost;
    int dayOfRecept;
    int monthOfRecept;
    int yearOfRecept;
    int dayOfIssue;
    int monthOfIssue;
    int yearOfIssue;
    bool status;
};
void showOredrsFile(orders Orders) {
    cout << endl;
    ifstream file("order.txt");
    int i = 0;
    cout << "\t\tOrders" << endl;
    while (file >> Orders.product >> Orders.mark >> Orders.surname >> Orders.name >> Orders.secondName >> Orders.phoneNumber >> Orders.cost >> Orders.dayOfRecept >> Orders.monthOfRecept
        >> Orders.yearOfRecept >> Orders.dayOfIssue >> Orders.monthOfIssue >> Orders.yearOfIssue >> Orders.status) {
        cout << i << " " << Orders.product << " " << Orders.mark << " " << Orders.surname << " " << Orders.name << " " << Orders.secondName << " " << Orders.phoneNumber << " " <<
            Orders.cost << " " << Orders.dayOfRecept << " " << Orders.monthOfRecept << " " << Orders.yearOfRecept << " " << Orders.dayOfIssue << " " << Orders.monthOfIssue << " " <<
            Orders.yearOfIssue << " " << Orders.status << endl;
        i++;
    }
    file.close();
    if (i == 0) {
        cout << "There're no orders now!" << endl;
    }
    cout << endl;
}
void addOrder(orders Orders) {
    ofstream file("order.txt", ios_base::app);
    cout << "Enter the product" << endl;
    cin >> Orders.product;
    cout << "Enter the mark" << endl;
    cin >> Orders.mark;
    cout << "Enter the surname" << endl;
    cin >> Orders.surname;
    cout << "Enter the name" << endl;
    cin >> Orders.name;
    cout << "Enter the second name" << endl;
    cin >> Orders.secondName;
    cout << "Enter the phone number" << endl;
    cin >> Orders.phoneNumber;
    cout << "Enter the cost" << endl;
    cin >> Orders.cost;
    cout << "Enter the day of recept" << endl;
    cin >> Orders.dayOfRecept;
    cout << "Enter the month of recept" << endl;
    cin >> Orders.monthOfRecept;
    cout << "Enter the year of recept" << endl;
    cin >> Orders.yearOfRecept;
    cout << "Enter the day of issue" << endl;
    cin >> Orders.dayOfIssue;
    cout << "Enter the month of issue" << endl;
    cin >> Orders.monthOfIssue;
    cout << "Enter the year of issue" << endl;
    cin >> Orders.yearOfIssue;
    cout << "Enter the status" << endl;
    cin >> Orders.status;
    file << Orders.product << " " << Orders.mark << " " << Orders.surname << " " << Orders.name << " " << Orders.secondName << " " << Orders.phoneNumber << " " <<
        Orders.cost << " " << Orders.dayOfRecept << " " << Orders.monthOfRecept << " " << Orders.yearOfRecept << " " << Orders.dayOfIssue << " " << Orders.monthOfIssue
        << " " << Orders.yearOfIssue << " " << Orders.status <<"\n";
    file.close();
    cout << "Order added!" << endl;
}
void editOrdersFile(orders Orders) {
    vector <orders> ord;
    ifstream file("orders.txt");
    while (file >> Orders.product >> Orders.mark >> Orders.surname >> Orders.name >> Orders.secondName >> Orders.phoneNumber >> Orders.cost >> Orders.dayOfRecept >> Orders.monthOfRecept
        >> Orders.yearOfRecept >> Orders.dayOfIssue >> Orders.monthOfIssue >> Orders.yearOfIssue >> Orders.status) {
        ord.push_back(Orders);
    }
    file.close();
    showOredrsFile(Orders);
    cout << "Enter the number of order, you want to edit" << endl;
    int choise = 0;
    cin >> choise;
    cout << "Enter the product" << endl;
    cin >> Orders.product;
    cout << "Enter the mark" << endl;
    cin >> Orders.mark;
    cout << "Enter the surname" << endl;
    cin >> Orders.surname;
    cout << "Enter the name" << endl;
    cin >> Orders.name;
    cout << "Enter the second name" << endl;
    cin >> Orders.secondName;
    cout << "Enter the phone number" << endl;
    cin >> Orders.phoneNumber;
    cout << "Enter the cost" << endl;
    cin >> Orders.cost;
    cout << "Enter the day of recept" << endl;
    cin >> Orders.dayOfRecept;
    cout << "Enter the month of recept" << endl;
    cin >> Orders.monthOfRecept;
    cout << "Enter the year of recept" << endl;
    cin >> Orders.yearOfRecept;
    cout << "Enter the day of issue" << endl;
    cin >> Orders.dayOfIssue;
    cout << "Enter the month of issue" << endl;
    cin >> Orders.monthOfIssue;
    cout << "Enter the year of issue" << endl;
    cin >> Orders.yearOfIssue;
    cout << "Enter the status" << endl;
    cin >> Orders.status;
    ord[choise] = Orders;
    ofstream file1("orders.txt");
    for (int i = 0; i < ord.size(); i++) {
        file1 << ord[i].product << " " << ord[i].mark << " " << ord[i].surname << " " << ord[i].name << " " << ord[i].secondName << " " << ord[i].phoneNumber << " " <<
            ord[i].cost << " " << ord[i].dayOfRecept << " " << ord[i].monthOfRecept << " " << ord[i].yearOfRecept << " " << ord[i].dayOfIssue << " " << ord[i].monthOfIssue
            << " " << ord[i].yearOfIssue << " " << ord[i].status << "\n";
    }
}

Задача - изменение информации о выбранном заказе и запись обновленной информации в файл. Однако при вводе новых данных о заказе выводит ошибку "Vector subscript out of range". В чем ошибка?

Answer 1

В функции editOrdersFile вы открываете файл, заполняете вектор заказами из файла, потом вы снова открываете тот же файл, когда вызываете showOredrsFile(Orders); и выводите из файла все заказы. Ну это еще не ответ к вопросу, хотя состояние вашего файла уже не есть good.

 cin >> choise;

неизвестно чем вы инициализировали choise, но зато вы спокойно производите присваивание

ord[choise] = Orders;

с чего вы взяли, что вектор имеет более чем choise элементов?.. Компилятор ругается именно из за этого, но в целом код лучше пишите заново, а то это больше похоже на безобразие, чем на код...

READ ALSO
Возникла проблема с задачей

Возникла проблема с задачей

Не понимаю, что не так с моим алгоритмом, но на сайте выдает что ошибка на одном из тестов проверкиОшибка в реализации алгоритма или в самом...

192
Почему не решается задача.Стек,С++

Почему не решается задача.Стек,С++

Всем приветЕсть задача , если запустить через консоль , то всё выдает как нужно

207
Добавить прогресс скачивания файла c++

Добавить прогресс скачивания файла c++

Добрый день, подскажите пожалуйстакак сделать так, чтобы отображался процесс скачивания файла в консоли?

226