Följ Black Week på SweClockers
Permalänk
Medlem

C++ problem (igen :)

Sökt, letat i mina böcker och blir inte klok. Jag måste göra ett program
som ska lagra filmer i strukturer, skriva strukturerna till en fil.
Sen ska man kunna lista alla filmer och kunna söka efter filmer.

Problemet är att jag inte vill använda char arrays som min bok
utan jag vill använda strängar. Detta leder till lite problem
och min bok som jag tyvärr måste följa ger mig ingen hjälp om
jag inte gör exakt som dom. Så nu postar jag den del kod
och hoppas att någon kan hjälpa mig att få det att funka iaf

Här har vi alltså strukturen.

struct film { std::string typ; std::string titel; };

Här har vi inmatningen av en film till filen filmer.txt

void laggtillfilm() { using namespace std; film inmat; system("CLS"); cout<<"Mata in typ (DVD/VHS) "; getline(cin,inmat.typ); cout<<"Mata in filmens titel "; getline(cin,inmat.titel); ofstream utfil; utfil.open("filmer.txt",ios::app); if(!utfil.is_open()) { cerr<<"Kunde inte öppna fil"; exit(EXIT_FAILURE); } else { utfil.write((char *)&inmat, sizeof(film)); cout<<"\n\nFilmen inlaggd" <<endl; Sleep(1000); } utfil.close(); }

raden utfil.write((char *)&inmat, sizeof(film)); skriver ut
strukturen men jag får då med lite extra tecken. Utskriften av
t.ex typ: DVD och titel: The Rock blir:

DVD [] [] The Rock [] []

eller något liknande, rutorna är rutor och inte 2 hakparanteser
och dom gå inte att kopiera/klistra in.

Jag vill att den ska skriva ut:

DVD The Rock

Hoppas nu att någon vänlig själ kan hjälpa mig så jag kan knata vidare med denna uppgift så jag kan skicka in den och bli av med detta.

Permalänk
Medlem

utfil.write((char *)&inmat, sizeof(film));

skulle tippa på den raden, läs om pekare.

Visa signatur

C#/MonoGame Fanatiker.
Pixel Artist & Game Developer

Permalänk
Medlem

Problemet du får beror på att du castar om en struct med två str::string till en char-array och skriver ut det som om det var bytes. Vad jag skulle göra är att skriva en funktion

ostream& operator<<(ostream& of, const film& f){ of << f.typ << " " << f.titel; return of }

och sedan använda utfil << inmat; för att skriva ut.

Vad detta gör är att operatorn << för ostream (vilket utströmobjekt som helst) och din strukt skapas.

Visa signatur

void@qnet
teeworlds, stålverk80, evil schemer, c, c++
Languages shape the way we think, or don't.

Permalänk
Medlem

Hur ska jag lägga det där i mitt program för att det ska funka.

När jag lägger den på samma plats där den gamla låg som skrev ut fel
så får jag error på att operator<< inte är en godkänd funktion eller liknande.

Permalänk
Medlem

Lägg det innan main

Visa signatur

Sveriges största guide till tv-serier - http://www.tv-serieguiden.com/

Permalänk
Medlem

varför använder du write?

utfil << "typ:\t" << inmat.typ << "\t" << "titel" << inmat.titel << std::endl

Visa signatur

{|XSX|PS3|PS4|}