程序在cin-C ++之后停止

时间:2018-06-09 13:52:19

标签: c++ vector struct

我知道这可能与此论坛上的另一个问题重复,但即使我搜索了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 :(得分:1)

替换此行:

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

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

错误源于尝试在其尚未拥有的位置访问向量elevi。因为向量开始在0建立索引,所以对elevi的第一次访问应该在索引0处。