Mit ronthattam el ebben a c++ kódban a fajlban levo adatok eltaralosanal?
Tehat adott a kovetkezo tartalmu fajl
tempomat
bluetooth
legkondi
7_ules
*
ABC123
Opel
Astra
2016
30000
6500000
tempomat
bluetooth
tempomat
*
PEN105
BMW
X6
2000
250000
3250000
bluetooth
tempomat
legkondi
*
OT2832
Trabant
601
1990
523000
1000000
*
SAJAT1
Ford
Smax
2010
175000
5500000
tempomat
7_ules
*
PAY368
Opel
Zafira
2016
113000
3000000
tempomat
7_ules
*
Amit így olvasok be egy osztály segítségével
#include<fstream>
#include<list>
#include<iostream>
#include<string>
#include<set>
typedef string Extra;
using namespace std;
class Kocsi {
string rendszam;
string gyartmany;
string tipus;
int ev;
string km;
int ar;
set<Extra> extra;
public:
Kocsi(string rendszam,
string gyartmany,
string tipus,
int ev,
string km, int ar)
{
this->rendszam = rendszam;
this->gyartmany = gyartmany;
this->tipus = tipus;
this->ev = ev;
this->km = km;
this->ar = ar;
}
Kocsi(const Kocsi& k)
{
this->rendszam = k.rendszam;
this->gyartmany = k.gyartmany;
this->tipus = k.tipus;
this->ev = k.ev;
this->ar = k.ar;
this->extra = k.extra;
}
void addtoset(const Extra& e) {
extra.insert(e);
}
friend ostream& operator<<(ostream& s, Kocsi& k) {
s << k.rendszam << " " << k.gyartmany << " " << k.tipus << " " << k.ev
<< " " << k.km << " " << k.ar << endl;
for (auto it : k.extra)
{
s << it << endl;
}
return s;
}
public:
string getRendszam() const { return rendszam; }
void setRendszam(string rendszam) { this->rendszam = rendszam; }
string getGyartmany() const { return gyartmany; }
void setGyartmany(string gyartmany) { this->gyartmany = gyartmany; }
string getTipus() const { return tipus; }
void setTipus(string tipus) { this->tipus = tipus; }
int getEv() const { return ev; }
void setEv(int ev) { this->ev = ev; }
string getKm() const { return km; }
void setKm(string km) { this->km = km; }
int getAr() const { return ar; }
void setAr(int ar) { this->ar = ar; }
};
int main() {
list<Extra> elista;
list<Kocsi> klista;
fstream inp("input.txt");
string extra;
string rendszam;
string gyartmany;
string tipus;
int ev;
string km;
int ar;
inp >> extra;
while (extra != "*")
{
elista.push_back(extra);
inp >> extra;
}
while (inp.good())
{
inp >> rendszam >> gyartmany >> tipus >> ev >> km >> ar;
Kocsi k(rendszam, gyartmany, tipus, ev, km, ar);
inp >> extra;
while (extra != "*")
{
k.addtoset(extra);
inp >> extra;
}
klista.push_back(k);
}
for (auto it : elista)
{
cout << it << endl;
}
for (auto it : klista)
{
cout << it << endl;
}
}
De valamiert a vegen 2szer írja ki az opel zafira 2016ot és km szamot se akarja rendesen megjeleniteni mit csinalok rosszul mit kell kijavitani h normalisan olvassa be a fajlt es tarolja el?
Eleve nem is fordul le, dob egy ilyen hibát kezdésként:
error: ‘string’ does not name a type; did you mean ‘stdin’?
és ezt a sort jelöli meg:
typedef string Extra;
A gond az, hogy a string típus az std névtérben van - azt már az Extra típus definiálása után használjuk fel.
Szóval a
using namespace std;
és a
typedef string Extra;
sorrendjét fel kell cserélni, és úgy már lefordul és lefut és a "a vegen" az "opel zafira 2016ot" nem fogja "2szer" kiírni.
Illetve még egy nüansz amit észrevettem: a km változó nem string, hanem int típusú - példa:
5. Visual studio 2019et hasznalok es valoban vetettem egy hibat amikor bemasoltam a kodot az elejen using namespace std;
És utana a typedef stringes resz
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!