Dlaczego, jeżeli w moim "laickim" programie w związku z utworzoną strukturą zrobię pętlę jak np. w tym programie w funkcji dodaj ucznia, pewnie dla tego, że jest w switch casie (miałem już takie przypadki), od razu po napisie podaj imię wyświetla się podaj nazwiskom, bez zastosowania w ogóle linijki gets(tablica[i].imie);
#include <cstdlib>
#include <iostream>
#include <fstream>
#include <string>
#define MAX 40
#include <windows.h>
using namespace std;
typedef struct UCZEN
{
char imie[20];
char nazwisko[40];
char klasa[10];
float srednia;
};
void dodaj_ucznia(UCZEN tablica[MAX], int& i)
{
cout<<"Podaj imie ucznia"<<endl;
gets(tablica[i].imie);
cout<<"Podaj nazwisko ucznia"<<endl;
gets(tablica[i].nazwisko);
cout<<"Podaj klase ucznia"<<endl;
gets(tablica[i].klasa);
cout<<"Podaj srednia ucznia"<<endl;
cin>>tablica[i].srednia;
i++;
system("CLS");
}
void dopliku(UCZEN tablica[MAX], int i)
{
fstream plik;
plik.open("plik.txt",ios::out);
if(plik.good()==true)
{
cout<<"Otwieranie pliku powiodlo sie"<<endl;
for(int k=0;k<i;k++)
plik<<tablica[k].imie<<" "<<tablica[k].nazwisko<<" "<<tablica[k].klasa<<" "<<tablica[k].srednia<<endl;
plik.close();
cout<<"Zakonczono zapisywanie\n"<<endl;
}
else cout<<"Pliku nie otwarto"<<endl;
}
void menu()
{
cout<<"Menu - Wybierz:\n1 - wczytaj dane uczniow z klawiatury\n - wczytaj dane uczniow z pliku\n - wyswietl dane uczniow wg nazwisk"
<<"\n - wyswietl dane uczniow wg imion\n - wyswietl dane uczniow wg srednich\n - wyswietl dane uczniow wg klas. "
<<"W przypadku uczniow z jednej klasy kryterium sortowania to nazwisko\n2 - zapisz dane do pliku\n0 - aby zakonczyc"<<endl;
}
int main(int argc, char *argv[])
{
int odp=10, i=0;
UCZEN* tablica=new UCZEN[MAX];
do
{
menu();
cin>>odp;
system("CLS");
switch(odp)
{
case 1:
dodaj_ucznia(tablica,i); break;
case 0:
{
system("PAUSE");
return EXIT_SUCCESS;
}
case 2:
dopliku(tablica,i); break;
default: cout<<"Zle dane"; break;
}
}
while(odp!=0);
system("PAUSE");
return EXIT_SUCCESS;
}