При считывании файла с диска и последующего вывода информации в консоль к исходным данным добавляется рандомный мусор, да и файл считывается не с начала.
Компилятор: Dev-C++ 4.9.9.2
Код:
#include <iostream.h>
#include <iomanip.h>
#include <fstream.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
struct book
{
char avtor[15];
char name[15];
char izdat[15];
int god;
};
struct avtor
{
char avtor[15];
int kolvo;
};
class dmassiv
{
private:
book *pst;
int n;
avtor *pz;
int k;
public:
dmassiv(){n=0;pst=NULL;k=0;pz=NULL;}
~dmassiv();
void inputbookfile();
void outputbook();
void perechavtor();
void outputperechavtor();
void outputperechfile();
};
void dmassiv::inputbookfile()
{
ifstream fin;
char file[15];
book t;
int i;
cout<<"File name:\n";
cin>>file;
fin.open(file);
if(fin==NULL)
{
cout<<"File not open\n";getch();exit(1);
}
n=0;
do {
fin>>t.avtor>>t.name>>t.izdat>>t.god;
n++;
}
while(fin.good());
n--;
fin.close();
pst=new book[n];
if(pst==NULL){cout<<"No dinamic memory\n";getch();exit(1);}
fin.open(file);
if(fin==NULL){cout<<"File not open\n";getch();exit(1);}
for(i=0;i<n;i++)
{
fin>>pst[i].avtor>>pst[i].name>>pst[i].izdat>>pst[i].god;
}
fin.close();
}
void dmassiv::outputbook()
{
int i;
cout<<"Ishodnik \n\n";
cout<<"Автор Название Издание Год\n";
for(i=0;i<n;i++)
{
cout<<pst[i].avtor<<setw(10)<<pst[i].name
<<setw(10)<<pst[i].izdat<<setw(10)<<pst[i].god <<endl;
}
}
void dmassiv::perechavtor()
{
int i,j,fl;
pz=new avtor[n];
if(pz==NULL){cout<<"No dinamic memory\n";getch();exit(1);}
if(pz!=NULL){delete []pz;k=0;}
for(i=0;i<n;i++)
{
fl=0;
for(j=0;j<k;j++)
if(strcmp(pst[i].avtor,pz[j].avtor)==0) {fl=1;pz[j].kolvo++;}
if(fl==0) {strcpy(pz[k].avtor,pst[i].avtor);pz[k].kolvo=1;k++;}
}
}
void dmassiv::outputperechavtor()
{
int i;
cout<<"Perechen ABTOPOB\n";
cout<<"ABTOP KOLI4ECTBO\n";
for(i=0;i<k;i++)
{
cout<<pz[i].avtor<<" "<<pz[i].kolvo<<endl;
}
}
void dmassiv::outputperechfile()
{
ofstream fout;
char file[10];
int i;
cout<<"File name:\n";
cin>>file;
fout.open(file);
if(!fout.good()){cout<<"File not created\n";getch();exit(1);}
for(i=0;i<k;i++)
fout<<pz[i].avtor<<" "<<pz[i].kolvo<<endl;
fout.close();
}
dmassiv::~dmassiv()
{
if(pst!=NULL){delete []pst;n=0;pst=NULL;}
if(pz!=NULL){delete []pz;k=0;pz=NULL;}
}
int main()
{
setlocale(LC_ALL, "Russian");
dmassiv a;
int j;
while(1)
{
cout<<"1.Enter the table\n";
cout<<"2.Print the table at screen \n";
cout<<"3.Creating perech\n";
cout<<"4.Print perech at screen\n";
cout<<"5.Vivod\n";
cout<<"6.Exit\n\n";
cout<<"Choose 1-6\n";
cin>>j;
switch(j)
{
case 1: a.inputbookfile();break;
case 2: a.outputbook();getch();break;
case 3: a.perechavtor();break;
case 4: a.outputperechavtor();getch();break;
case 5: a.outputperechfile();break;
case 6: cout<<"3ABEPIIIEHIE PAboT6I";getch(); return 1;
default: cout<<"ERROR.Repeat Please";getch();
}
}
getch();
}