C ++ Progam падает после запроса размера массива - PullRequest
1 голос
/ 15 марта 2019

Я пытаюсь написать программу, с помощью которой вы можете управлять данными в этом массиве.Но почему-то каждый раз, когда я пытаюсь использовать arr.size();, программа просто вылетает.

#include <iostream>
#include <stdlib.h>
#include <vector>

using namespace std;

int main() {
    while (true) {
        int choice;

        cout << "Make new Array with custom size...(1)" << endl;
        cout << "Add amount at the end.............(2)" << endl;
        cout << "Delete amount at the end..........(3)" << endl;
        cout << "Add amount at location i..........(4)" << endl;
        cout << "Delete amount at location i.......(5)" << endl;
        cout << "Delete Array......................(6)" << endl;
        cout << "Show Array........................(7)" << endl;
        cout << "END...............................(0)" << endl;
        cout << "Choice: ";
        cin >> choice;

        vector<double> arr;

        switch (choice) {
        case 1: {
            int i;

            cout << "Enter array size: ";
            cin >> i;

            arr.resize(i);

            cout << "Set array size to " << i << "!" << endl;
            cout << "Success!" << endl;

            system("pause");
            system("cls");

            break;
        }

        case 2: {
            double amount;

            cout << "Enter amount: ";
            cin >> amount;

            int location = arr.size();
            cout << location << " " << amount << endl;

            arr[location] = amount;

            cout << arr[location] << endl;
            cout << "Successfully saved!" << endl;

            system("pause");
            system("cls");
            break;
        }

        case 3:

            arr[arr.size()] = 0;

            cout << "Success: " << arr[arr.size] << endl;

            system("pause");
            system("cls");

            break;

        case 4: {
            int ite;
            float numb;

            cout << "Please enter amount: ";
            cin >> numb;
            cout << "Please enter amount for the i'th location: ";
            cin >> ite;

            cout << "Success!" << endl;

            system("pause");
            system("cls");

            break;
        }

        case 5:
            int ites;

            cout << "Please enter amount for the i'th location: ";
            cin >> ites;

            arr[ites] = 0;

            cout << "Success!" << endl;

            system("pause");
            system("cls");

            break;

        case 6:
            int o;

            for (o = 0; o < arr.size(); o++) {
                arr[o] = 0;
            }

            cout << "Success!" << endl;
            system("pause");
            system("cls");

            break;

        case 7:
            int j;

            for (j = 0; j < ARRAYSIZE(arr); j++) {
                cout << "Array[" << j << "] = " << arr[j] << endl;
            }

            system("pause");
            system("cls");

            break;

        case 0: {
            cout << "Exit Program....";

            return 0;
        }
        }
    }

    return 0;
}

Ответы [ 2 ]

2 голосов
/ 15 марта 2019

Здесь, на этой линии

for(j = 0; j < ARRAYSIZE(arr); j++){

Что такое ARRAYSIZE? Это не определено нигде в вашем коде. Вы, вероятно, имели в виду это вместо:

for(j = 0; j < arr.size(); j++){

Также обратите внимание, что size - это функция, поэтому вам нужно вызвать ее, поставив () в конце. Это здесь не будет работать:

cout << "Success: " << arr[arr.size] << endl;

Вам нужно arr.size(), чтобы он скомпилировался, и даже тогда это было бы за пределами. Чтобы напечатать последний элемент, выполните arr[arr.size()-1] или, что еще лучше, arr.back() (и убедитесь, что массив не пустой в любом случае, используя arr.empty()). Чтобы просто напечатать размер массива, выполните:

cout << "Success: " << arr.size() << endl;

Небольшое примечание (не беспокойтесь, проблем не возникло): в этом цикле

int o;
    for(o = 0; o < arr.size(); o++){
        arr[o] = 0;
    }

Поскольку вы не используете o вне цикла, вы можете просто переместить объявление в инициализацию цикла, например:

for(int o = 0; o < arr.size(); o++){
    arr[o] = 0;
}

И если вы получаете предупреждение о несоответствии со знаком / без знака, вы можете избавиться от него, изменив int на unsigned int.

1 голос
/ 15 марта 2019

В строке № 83 (внутри случая 3) Вы забыли круглые скобки. Вы написали

cout << "Success: " << arr[arr.size] << endl;

Если вы хотите вызвать функцию size (), которая будет записывать размер, он должен быть

cout << "Success: " << arr[arr.size()] << endl;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...