Не вычисляется среднее

У меня должен вычисляться средний балл (функция average) у студентов по трем предметам. Проблема: я ввожу разные оценки а средний балл у всех студентов всегда один, плюс ещё отрицательный. Не знаю, откуда берется это число. Дальше должна работать функция excellent, которая выводит всю информацию о студентах, со средним баллом > 4.5 В чем может быть проблема?

Код:

#include <iostream>
using namespace std;
struct student
{       char surname[21];
        char group[21];
        int course;
        int physics;
        int programming;
        int math;
        float mark;
        // Информация о рабочих
        char WorkersName[21];
        char JobTitle[21];
}; 
void read(student & s)
{       cout << " Фамилия: ";
        cin >> s.surname;
        cout << "\n Группа: ";
        cin >> s.group;
        cout << "\n Курс: ";
        cin >> s.course;
        cout << "\n Физика: ";
        cin >> s.physics;
        cout << "\n Программирование: ";
        cin >> s.programming;
        cout << "\n Математика: ";
        cin >> s.math;
        cout << "\n Имя рабочего: ";
        cin >> s.WorkersName;
        cout << "\n Должность рабочего: ";
        cin >> s.JobTitle;
} 
void print(student & s)
{       printf("\t%10s  \t", s.surname);
        printf("\t%10s  \t", s.group);
        printf("\t%1d  \t", s.course);
        printf("\t%1d  \t", s.physics);
        printf("\t%1d  \t", s.programming);
        printf("\t\t%1d   \t", s.math);
        printf("\t%.2f \t", s.mark);
}
void average(student & s, const int n) { 
    float sr_rating = 0;
    sr_rating += s.physics;
    sr_rating += s.programming; 
    sr_rating += s.math;
    sr_rating /= n;
    sr_rating = s.mark;



    sr_rating = 0;
}
void excellent(student & s) {
    if (s.mark > 4.5) {
        print(s);
    }
}
int main()
{   student *s;
    setlocale(0, "");
    int n = 3;
    cout << "Введите количество студентов > ";
    cin >> n;
    cout << endl;
    s = new student [n];
    cout << "\nВведите данные > \n";
    for (int i = 0; i<n; i++)
    {
        read(s[i]);
        average(s[i], n);
        excellent(s[i]);
    }

    printf("\tФамилия:\t\tГруппа:\t\tКурс:\t\tФизика:\t\tПрограммирование:\t\tМатематика:\t\tСредний:\n");
    for (int i = 0; i < n; i++)
    {
        print(s[i]);
        cout << endl;
    }
    cout << endl;
    cout << endl;
    system("pause");
    return 0;
}

Ответы (2 шт):

Автор решения: Sergey Tatarincev

вас не смущает что average() ничего не делает? В прямом смысле слова. может там все же что-то типа

s.mark = sr_rating;
→ Ссылка
Автор решения: Harry

А что она вообще у вас делает?

void average(student & s) { 
    float sr_rating = 0;
    sr_rating += s.physics;
    sr_rating += s.programming; 
    sr_rating += s.math;      
    sr_rating = s.mark;    
    sr_rating = 0;
}

Она суммирует что-то в локальной переменной sr_ratting, после чего, затирает эту сумму значением s.mark, а потом, никуда не сохраняя это значение, просто выбрасывает его при выходе из функции.

Так что она не только не считает среднее, но даже и сумму не сохраняет...

P.S. Более того, наличие каких-то рабочих в студентах меня очень смущает. В том плане, что вы взяли чью-то программу, и пытаетесь в ней менять что-то под свои нужды, не понимая, как... Я неправ?

→ Ссылка