_13th_Dragon napisał(a)
Na dobrą sprawę każdy wiersz ma się kończyć enterem. Jeżeli nie to jest to niekompletny wiersz.
Problem masz prawdopodobnie z odczytem.
jeżeli używasz plik.eof() to na 100% tam masz problem.
Przeanalizuj mój program:
#include <cstdlib>
#include <iostream>
#include <fstream>
#include <string>
#define MAX 40
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 zapis;
zapis.open("zapis.txt",ios::out);
if(zapis.good()==true)
{
cout<<"Otwieranie pliku powiodlo sie"<<endl;
for(int k=0;k<i;k++)
zapis<<tablica[k].imie<<" "<<tablica[k].nazwisko<<" "<<tablica[k].klasa<<" "<<tablica[k].srednia<<endl;
zapis.close();
cout<<"Zakonczono zapisywanie\n"<<endl;
}
else cout<<"Pliku nie otwarto"<<endl;
}
void menu()
{
cout<<"Menu - Wybierz:\n1 - wczytaj dane uczniow z klawiatury\n3 - wczytaj dane uczniow z pliku\n4 - wyswietl dane uczniow wg nazwisk"
<<"\n5 - wyswietl dane uczniow wg imion\n6 - wyswietl dane uczniow wg srednich\n7 - wyswietl dane uczniow wg klas. "
<<"W przypadku uczniow z jednej klasy kryterium sortowania to nazwisko\n2 - zapisz dane do pliku\n0 - aby zakonczyc"<<endl;
}
void wczytaj(UCZEN tablica[MAX],int& i)
{
fstream plik;
int m=0;
plik.open("dane.txt",ios::binary|ios::in);
if(plik.good()==true)
{
while(!plik.eof())
{
plik>>tablica[m].imie;
plik>>tablica[m].nazwisko;
plik>>tablica[m].klasa;
plik>>tablica[m].srednia;
m++;
i++;
}
plik.close();
}
else cout<<"Nie udalo sie otworzyc pliku/n";
}
void sortuj(UCZEN tablica[MAX], int n, int odp)
{
switch(odp)
{
case 6:
{
}
break;
default: cout<<"Error\n\n"; break;
}
}
void wyswietl(UCZEN tablica[MAX], int n)
{
for(int l=0;l<n;l++)
cout<<tablica[l].nazwisko<<" "<<tablica[l].imie<<" "<<tablica[l].klasa<<" "<<tablica[l].srednia<<endl;
cout<<"\n\n";
}
int main(int argc, char *argv[])
{
int odp=10, i=0;
UCZEN* tablica=new UCZEN[MAX];
do
{
menu();
(cin>>odp).sync();
system("CLS");
switch(odp)
{
case 1:
dodaj_ucznia(tablica,i); break;
case 0:
{
system("PAUSE");
return EXIT_SUCCESS;
}
case 2:
dopliku(tablica,i); break;
case 3:
wczytaj(tablica,i); break;
case 4:
sortuj(tablica, i, odp); break;
case 5:
sortuj(tablica, i, odp); break;
case 6:
{
sortuj(tablica, i, odp);
wyswietl(tablica, i); break;
}
case 7:
sortuj(tablica, i, odp); break;
default: cout<<"Zle dane\n\n"; break;
}
}
while(odp!=0);
system("PAUSE");
return EXIT_SUCCESS;
}