Программа завершается перед выполнением остальной части программы - PullRequest
0 голосов
/ 10 июля 2020

Я пытаюсь создать программу для студентов, но она останавливается после того, как я поставил 4-е имя, это не позволяет мне ставить оценки и не показывает список в конце ...

#include<iostream>

using namespace std;

int main()

{

    string name[4];
    double g1[4],g2[4],avg[4];
    int cont;
    for(cont=1;cont<=4;cont++)
    {
        cout<<"STUDENT "<<cont<<"\n";
        cout<<"Name: ";
        cin>>name[cont];
        cout<<"First Grade: ";
        cin>>g1[cont];
        cout<<"Second Grade: ";
        cin>>g2[cont];
        avg[cont]=(g1[cont]+g2[cont])/2;
    }
    cout<<"STUDENTS LIST"<<"\n";
    cout<<"--------------"<<"\n";
    for(cont=1;cont<=4;cont++)
    {
        cout<<name[cont]<<" "<<avg[cont]<<"\n";
    }
}

Ответы [ 2 ]

6 голосов
/ 10 июля 2020

string name[4]; - массив из 4 элементов. Допустимые индексы - 0,1,2 и 3. Циклы пропускают первый элемент и получают доступ к массиву за пределами границ на последнем итератоне. Это вызывает неопределенное поведение. Все могло случиться.

2 голосов
/ 10 июля 2020

Два цикла for(cont=1;cont<=4;cont++) неверны, потому что вы можете использовать индекс 0, 1, 2, 3 только для 4-элементных массивов.

Вместо этого вы должны использовать for(cont=0;cont<4;cont++) и изменить cout<<"STUDENT "<<cont<<"\n"; на cout<<"STUDENT "<<(cont+1)<<"\n";.

Другой вариант - добавить по одному элементу в каждый массив. Тогда первые элементы массивов не будут использоваться, но это может улучшить читаемость.

...