代码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()
#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();
}
我想获得duomenys.txt文件的第一行:“varztas”,但如果我在l61.cpp中使用这些行:
getline(fd, dt);
fd.ignore(80, '/n');
我的程序不起作用,但如果我对此行发表评论,程序可以正常工作,但不会写出“varztas”的标题。
duomenys.txt文件看起来像
Varztas
30 200 2000 01 03
***
所以我需要Varztas投入大量资料。
抱歉我的英文。
答案 0 :(得分:4)
您在此行中写了'/n'
而不是'\n'
:
fd.ignore(80, '/n');
由于找不到与多字符文字'/n'
对应的值,这将导致从流中跳过80个字符。