Программа останавливается после cin - C ++ - PullRequest
0 голосов
/ 09 июня 2018

Я знаю, что это может быть дубликатом другого вопроса на этом форуме, но я не смог найти решение своей проблемы, даже если я искал примерно 1 час.Проблема в том, что моя программа останавливается после 4-го "cin".Я не знаю почему, я попробовал все: "cin.ingore (); cin.clear ();", "cin.get ();".Может ли кто-нибудь помочь мне, пожалуйста?

#include <iostream>
#include <vector>
#include <iomanip>

using namespace std;

struct elev
{
    char nume[20];
    vector<int> note_info;
    float medie;
};

int main()
{
    int n, e = 0;
    vector<elev> elevi;

    cout << "n = "; cin >> n;

    for (int i = 1; i <= n; i++)
    {
        int s = 0, nr;

        elevi.push_back(elev());

        cout << "Nume elev: "; cin >> elevi[i].nume;
        cout << "Numar note informatica: "; cin >> nr;

        for (int j = 0; j < nr; j++)
        {
            int temp;
            cout << "Nota nr. " << j + 1 << ": "; cin >> temp;
            elevi[i].note_info.push_back(temp);
            s += temp;
        }

        elevi[i].medie = (float)(s / nr);
    }

    for (int i = 1; i <= n; i++)
    {
        for (int j = i; j <= n; j++)
        {
            if (elevi[j].medie != elevi[j + 1].medie)
            {
                e += 1;
            }
        }
    }

    if (e)
    {
        for (int i = 1; i <= n; i++)
        {
            for (int j = 1; j <= n - i; j++)
            {
                if (elevi[j].medie < elevi[j + 1].medie)
                {
                    elev temp = elevi[j];
                    elevi[j] = elevi[j + 1];
                    elevi[j + 1] = temp;
                }
            }
        }
    }
    else
    {
        for (int i = 1; i <= n; i++)
        {
            for (int j = 1; j <= n - i; j++)
            {
                if (elevi[j].nume > elevi[j + 1].nume)
                {
                    elev temp = elevi[j];
                    elevi[j] = elevi[j + 1];
                    elevi[j + 1] = temp;
                }
            }
        }
    }

    cout << "Rezultate:";

    for (int i = 1; i <= n; i++)
    {
        cout << '\n' << elevi[i].nume << ' ' << setprecision(2) << fixed << elevi[i].medie;
    }

    return 0;
}

1 Ответ

0 голосов
/ 09 июня 2018

Замените эту строку:

for (int i = 1; i <= n; i++)

на

for (int i = 0; i < n; ++i)

Ошибка связана с попыткой получить доступ к вектору elevi в позиции, которой у него еще нет.Поскольку векторы начинают индексироваться с 0, первый доступ к elevi должен быть с индексом 0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...