Zmienna p jest zmienną lokalną. Więc po wykonaniu się programu wszystko co jest wewnątrz funkcji "wczytaj_indeks" zostanie skasowane. Zauważ że nic nie robisz ze zmienną którą przekazujesz. Przebuduje zaraz aplikację tak aby działała, tylko że będzie wyglądać o wiele inaczej.
Ps
Kod jest cholernie nieczytelny, o wiele byś ułatwił sprawę mi i sobie prawdopodobnie, gdybyś przynajmniej nazywał zmienne tak by było wiadome czym one są i do czego służą.
Kod gotowy, masz strasznie pogmatwany sposób myślenia. Na drugi raz podaj w ogóle założenia by móc Cię pokierować. Bo jeżeli miał być użyty wskaźnik, był zakaz vectorów etc to warto wiedzieć. Oferuję skasować całą aplikacje, cały kod. I zacząć od nowa, bo strasznie ciężko się po tym poruszać. Wprowadziłem kilka modyfikacji, ale też cenię swój czas i nie poprawiałem wszystkiego tylko starałem się zrobić tak aby działało. Dodatkowo masz błąd, w przypadku gdy wpisuje się w ocenie "1", dwa razy. To program raz informuje o błędzie a drugi raz już leci dalej.
#include <iostream>
#include <conio.h>
#include <string>
#include <fstream>
#include <cstdlib>
#include <vector>
#include <time.h>
#include <limits>
using namespace std;
class Elektrotechnika
{
public:
string kierunek = "Wydzial uczelni - IPR Elektrotechnika";
};
class Student : public Elektrotechnika
{
int liczba;
double suma = 0;
double srednia;
int nr_indeksu;
string imie_studenta;
string nazwisko_studenta;
public:
friend void wczytaj_indeks(Student& w);
void wyswietl(Student&);
void wylicz(Student&);
};
void Student::wyswietl(Student& k1)
{
cout << "*************************************" << endl;
cout << "Dla studenta: " << k1.imie_studenta << " " << k1.nazwisko_studenta << " ";
cout << "o numerze indeksu: " << k1.nr_indeksu << endl;
cout << "Srednia ocen wynosi: " << srednia << endl;
cout << "*************************************" << endl;
}
void wczytaj_indeks(Student& Student)
{
// To tutaj nie może być, wczytujesz indeks JEDNEGO studenta
/*
int NumberOfStudents;
cout << "Podaj ilosc studentow: ";
cin >> NumberOfStudents;
if (NumberOfStudents <= 0)
{
cout << "Musisz podac liczbe dodatnia. Wprowadz jeszcze raz: ";
cin >> NumberOfStudents;
}
for (int i{ 0 }; i < NumberOfStudents; i++)
{*/
cout << "Podaj imie i nazwisko studenta wraz z numerem indeksu: ";
cin >> Student.imie_studenta >> Student.nazwisko_studenta >> Student.nr_indeksu;
//}
}
void Student::wylicz(Student& s)
{
int x;
double* tab;
cout << "Podaj ilosc ocen jaka zdobyl student: ";
cin >> x;
if (x <= 0)
{
cout << "Ilosc ocen musi byc dodatnia. Wprowadz jeszcze raz ";
cin >> x;
}
tab = new double[x];
for (int i = 0; i < x; ++i)
{
cout << "Podaj ocene: ";
cin >> tab[i];
if (tab[i] < 2 || tab[i] > 5)
{
cout << "To nie jest ocena! ";
cout << "Podaj ocene jeszcze raz: ";
cin >> tab[i];
}
}
for (int i = 0; i < x; ++i)
{
s.suma += tab[i];
}
s.srednia = s.suma / x;
}
int main(int argc, char* argv[])
{
cout << "Dziennik eStudent 2020 - Projekt na zaliczenie" << endl;
std::vector<Student> Students;
// nie wiem jaki sens ma ta linijka poniżej, czemu wywołujesz funkcję elementu który jest całkowicie pusty
//cout << "Obecnie: " << Studentowy.kierunek << endl << endl << endl;
//
//
int NumberOfStudents;
cout << "Podaj ilosc studentow: ";
cin >> NumberOfStudents;
if (NumberOfStudents <= 0)
{
cout << "Musisz podac liczbe dodatnia. Wprowadz jeszcze raz: ";
cin >> NumberOfStudents;
}
for (int i{ 0 }; i < NumberOfStudents; i++)
{
Student TempStudent;
Students.push_back(TempStudent);
wczytaj_indeks(Students[i]);
}
for (auto& Student : Students)
{
Student.wylicz(Student);
Student.wyswietl(Student);
}
system("PAUSE");
return 0;
}