Pereiti prie turinio

Rekomenduojami pranešimai

Sveiki rasau rasau, bet vot kompiliuojant erroras, ir niekaip nematau kur klaida gal kas padesite

#include "L61.h"

Sak::~Sak(){
}

void Sak::Skaityti(ifstream &fd)
{
string dt; char pabaiga[30]; int kiekis, kaina, metai, menuo, diena;							//detalei saugoti
bool baigti(false);
getline(fd, dt);							//skaitomas detales pavadinimas
fd.ignore(0, '/n');
kamienas *d = new kamienas;					//naujas saraso elementas
d->deta = dt;
d->kitas = pr;
pr = d;
while (!baigti)								//skaitomaas vienas dokumentas
{	
	fd.get(pabaiga, 15);
	if(pabaiga =="***")
	{
		baigti = true;
	}
	else
	{
		sarasas st;
		fd >> kiekis >> kaina >> metai >> menuo >> diena;
		st.pg=kiekis;
		st.ka=kaina;
		st.dt.mt=metai;
		st.dt.men=menuo;
		st.dt.die=diena;
		pr->sar.Papildyti(st);
	}
	fd.ignore(18, '\n');
}
} 



void Sak::Spausdinti(string fv)
{
ofstream fr(fv.c_str(), ios::app);
for (kamienas *d = pr; d != NULL; d = d->kitas) 
{
	fr << "Detale: " << d->deta<< endl;
	SpausdintiSaka(fr, d->sar);
}
}
void Sak::SpausdintiSaka(ofstream &fr, Detale &sar)
{
sarasas d;
for(sar.Pradzia(); !sar.Pabaiga(); sar.Kitas())
{
	sar.Imti(d);
	fr << d.pg << "vnt. " << d.ka << "Lt  " << d.dt.mt<<" "<<d.dt.men<<" "<<d.dt.die<<" data"<<endl;
}
fr<<"-------------------------\n";
}

/*void Sak::Naikinti()
{
kamienas *g;
while(p!=NULL)
{
	g=p;
	p = p->kitas;
	NaikintiSaka(g->sar);
	delete g;
}
}*/

/*void Sak::NaikintiSaka(sarasas *saka)
{
sarasas *d;
while(saka !=NULL)
{
	d=saka;
	saka =  d->next;
	delete d;
}


}*/

#include <string>
#include <fstream>
#include <iostream>
#include <iomanip>
#include "l6.h"
using namespace std;
struct kamienas
{
string deta;					//Kamieno detale
kamienas *kitas;				//rodykle i kita elementa(detale)
Detale sar;				//sakos padzios rodykle
};
class Sak
{
private:
kamienas *pr;				//saraso pradzia
void SpausdintiSaka(ofstream &fr, Detale &sar);
public:
Sak() {pr =NULL;}
~Sak();


void Skaityti(ifstream &fd);
void Spausdinti(string fv);
}

 

 

klaida, tame kad pirmame kode cpp faile meta errora kad konstruktorius 1>h:\programavimolaboratoriniai2\l6gindra\l6gindra\l6gindra\lp6.cpp(3) : error C2577: 'Sak::~Sak' : a destructor cannot have a return type.

 

 

nesuprantu viska perziurejau, daug pavyzdziu dag kas taip pat parase ir jiems nera errorro, gal jau ko nebematau, padekite kas galite :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Na issitaisiau, buvau kablataski paskutini uzmirses, Bet vistiek nuskaitymas neviksta gerai, nes kazko nenuskaito detales pavadinimo

/////////////////////l6.h
#include <string>
#include <fstream>
#include <iostream>
#include <iomanip>
using namespace std;

struct data
{
int mt;						//metai
int men;					//menesis
int die;					//diena
};

struct sarasas					//sakos
{
int pg;						//pagamintas kiekis
int ka;						//kaina
data dt;					//data

};
struct SarV
{
sarasas duom;
SarV *sekV;
};


class Detale
{
private:
SarV *p, *d;								//saraso padzia
public:
Detale():P(NULL) {}
~Detale() {};						//destruktoriuis
void Pradzia(){d = p;}
bool Pabaiga(){return d == NULL;}
void Kitas(){d = d->sekV;}
void Imti(sarasas &st){ st = d->duom;}
void Papildyti(sarasas st ){
	SarV *d = new SarV;					//saka papildoma nauju elementu
				d->duom = st;
				d->sekV = p;
				p = d;
							}
};

///////////////////L61.h
#include <string>
#include <fstream>
#include <iostream>
#include <iomanip>
#include "l6.h"
using namespace std;
struct kamienas
{
string deta;					//Kamieno detale
Detale sar;				//sakos padzios rodykle
   kamienas *kitas;
};
class Sak
{
private:
kamienas *pr;				//saraso pradzia
void SpausdintiSaka(ofstream &fr, Detale &sar);
public:
Sak() {pr =NULL;}
~Sak();
void Skaityti(ifstream &fd);
void Spausdinti(string fv);
};

/////////////L61.cpp
#include "L61.h"

Sak::~Sak(){}

void Sak::Skaityti(ifstream &fd)
{
string dt,eil; char pabaiga[30];// int kiekis, kaina, metai, menuo, diena;							//detalei saugoti
bool baigti= false;
getline(fd, dt);							//skaitomas detales pavadinimas
fd.ignore(80, '/n');
kamienas *d = new kamienas;					//naujas saraso elementas
d->deta = dt;
d->kitas = pr;
pr = d;
while (!baigti)								//skaitomaas vienas dokumentas
{	
	fd.get(pabaiga, 15);
	eil=pabaiga;
	if(eil == "***")
	{
		baigti = true;
	}
	else
	{
		sarasas st;
		fd >> st.pg>> st.ka >> st.dt.mt >> st.dt.men >> st.dt.die;
		pr->sar.Papildyti(st);
	}
	fd.ignore(80, '\n');
}
} 



void Sak::Spausdinti(string fv)
{
ofstream fr(fv.c_str(), ios::app);
for (kamienas *d = pr; d != NULL; d = d->kitas) 
{
	fr << "Detale: " << d->deta<< endl;
	SpausdintiSaka(fr, d->sar);
}
}
void Sak::SpausdintiSaka(ofstream &fr, Detale &sar)
{
sarasas d;
for(sar.Pradzia(); !sar.Pabaiga(); sar.Kitas())
{
	sar.Imti(d);
	fr << d.pg << "vnt. " << d.ka << "Lt  " << d.dt.mt<<" "<<d.dt.men<<" "<<d.dt.die<<" data"<<endl;
}
fr<<"-------------------------\n";
}

///////////////////main()failas
#include <string>
#include <fstream>
#include <iostream>
#include "L61.h"

using namespace std;
const string CDfv = "duomenys.txt";
const string CRfv = "rezultatai.txt";
void IvestiDokumentuDuomenis(Sak &sakotas,string fv);
int main()
{
ofstream fr(CRfv.c_str());
fr.close();
Sak s;							//objektas su sakotu sarasu
IvestiDokumentuDuomenis(s,CDfv);
s.Spausdinti(CRfv);
return 0;

}

void IvestiDokumentuDuomenis(Sak &sakotas,string fv)
{
 ifstream fd(fv.c_str());
 int n = 1;
 while (!fd.eof()) {
  sakotas.Skaityti(fd);
   cout << "Perskaitytas " << n <<"-asis dokumentas\n";
   n++;
 }
 fd.close();
}

 

kiei issiaiskinau tai jeigu L61.cpp faile skaitymo funkcijoje uzkomentuosiu

getline(fd, dt); //skaitomas detales fd.ignore(80, '/n');

sitas eilutes tai kaip ir veiks, tik nenuskaitys detales pavadinimo, o jeigu ju nekuomentuosi tai windows lange paluzta pati programa

 

Tarkime duomenu failas taip atrodo

 

Varztas

30 200 2000 01 03

***

 

 

Tai vat gal kas pagelbes, zinau kad llaida ce kazkur maza labai yra, bet pamatytu jos niekaip neina.

Redagavo sparagas
Nuoroda į pranešimą
Dalintis kituose puslapiuose

iskilodar problema tame paciame kode, man reikia duom faile

 

varztas

20 20 2000 01 01

***

 

nuskaityti duomenis bet funkcija

void Sak::Skaityti(ifstream &fd)
{
       string dt; char pabaiga[30]; int kiekis, kaina, metai, menuo, diena;                                                    //detalei saugoti
       bool baigti(false);
       getline(fd, dt);                                                        //skaitomas detales pavadinimas
       fd.ignore(0, '\n');
       kamienas *d = new kamienas;                                     //naujas saraso elementas
       d->deta = dt;
       d->kitas = pr;
       pr = d;
       while (!baigti)                                                         //skaitomaas vienas dokumentas
       {       
               fd.get(pabaiga, 15);
               if(pabaiga =="***")
               {
                       baigti = true;
               }
               else
               {
                       sarasas st;
                       fd >> kiekis >> kaina >> metai >> menuo >> diena;
                       st.pg=kiekis;
                       st.ka=kaina;
                       st.dt.mt=metai;
                       st.dt.men=menuo;
                       st.dt.die=diena;
                       pr->sar.Papildyti(st);
               }
               fd.ignore(18, '\n');
       }
} 

 

blogai veikia, nes nuskaito varzta, ji padeda i sarasa, ir iskarto kazkaip persoka i trecia eilute nuskaito *** ir baigiasi perograma, kai dar turi nuskaityti, ir tuos skaicius esancius po varztas, kaip reiktu paredaguoti ta koda kad skaityti tvarkingai viska?niekaip nesigauna, gal pades kas

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Ieškodamas *** su fd.get(pabaiga, 15) praleidi dalį duomenų

#include <sstream>
// ...
void Sak::Skaityti(ifstream &fd)
{
       string dt;
       string eilute; // duomenu eilute po detales pavadinimu
       int kiekis, kaina, metai, menuo, diena;        //detalei saugoti
       bool baigti(false);

       getline(fd, dt);                    //skaitomas detales pavadinimas

       kamienas *d = new kamienas;                                     //naujas saraso elementas
       d->deta = dt;
       d->kitas = pr;
       pr = d;

       while (!baigti  && fd.good())                                                         //skaitomaas vienas dokumentas
       {       
               getline(fd,eilute); // nuskaityti eilute po detales pavadinimu
               if(eilute =="***")
               {
                       baigti = true;
               }
               else
               { 
               // paversti eilute i stringstream, kad galima butu naudoti '>>' kaip ir su failais
                       stringstream ss(eilute); 

                       sarasas st;
                       ss >> kiekis >> kaina >> metai >> menuo >> diena;
                       st.pg=kiekis;
                       st.ka=kaina;
                       st.dt.mt=metai;
                       st.dt.men=menuo;
                       st.dt.die=diena;
                       pr->sar.Papildyti(st);
               }
       }
} 

Tingėjau kompiliuoti visą kodą, bet turėtų veikti :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Ieškodamas *** su fd.get(pabaiga, 15) praleidi dalį duomenų

#include <sstream>
// ...
void Sak::Skaityti(ifstream &fd)
{
       string dt;
       string eilute; // duomenu eilute po detales pavadinimu
       int kiekis, kaina, metai, menuo, diena;        //detalei saugoti
       bool baigti(false);

       getline(fd, dt);                    //skaitomas detales pavadinimas

       kamienas *d = new kamienas;                                     //naujas saraso elementas
       d->deta = dt;
       d->kitas = pr;
       pr = d;

       while (!baigti  && fd.good())                                                         //skaitomaas vienas dokumentas
       {       
               getline(fd,eilute); // nuskaityti eilute po detales pavadinimu
               if(eilute =="***")
               {
                       baigti = true;
               }
               else
               { 
               // paversti eilute i stringstream, kad galima butu naudoti '>>' kaip ir su failais
                       stringstream ss(eilute); 

                       sarasas st;
                       ss >> kiekis >> kaina >> metai >> menuo >> diena;
                       st.pg=kiekis;
                       st.ka=kaina;
                       st.dt.mt=metai;
                       st.dt.men=menuo;
                       st.dt.die=diena;
                       pr->sar.Papildyti(st);
               }
       }
} 

Tingėjau kompiliuoti visą kodą, bet turėtų veikti :)

Aciu veikia :) tik ka reiskai kelios eilutes gal gali placiau papasakoti?

#include <sstream>

fd.good()

stringstream ss(eilute);

sitak aip ir supratau, bet pirma karta matau butu idomu placiau isgirsti ka

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

×
×
  • Pasirinkite naujai kuriamo turinio tipą...