- Kulan
- Medlem ●
- Varberg
- 2011-07-13 11:32
Håller på att slutföra en inlämningsuppgift till skolan men jag har ett problem som jag inte får till. Koden nedan fungerar förutom när jag skall "Lista alla filmer", om jag givit en film ett namn innehållande ett mellanslag så listas inte texten efter mellanslag. Är det någon som kan ge mig en ledtråd i rätt riktning vore det snällt. Denna fråga kommer även att ställas på MacWorldsforum eftersom jag inte vet hur många som är här och läser nu under sommaren.
/* Programmering B (PROC1408) ‚Äì Inl√§mningsuppgift 2 Skapa ett registerprogram som kan lagra information om filmer i en fil. Varje post i registret ska best√• av en struct. Programmet m√•ste d√§rf√∂r kunna hantera structer som best√•r av typ och titel. Exempel p√• typ kan vara DVD, Blueray eller VHS. Programmet ska √§ven kunna s√∂ka efter filmtitlar och d√§refter informera anv√§ndaren om filmen finns, samt i vilket format den finns tillg√§nglig. F√∂ljande meny skall kunna anv√§ndas i programmet: void meny() { cout<<"\\\\\\\\ Meny ////////"<<endl; cout<<"1. L√§gg till film"<<endl; cout<<"2. Lista alla filmer"<<endl; cout<<"3. S√∂k titel"<<endl; cout<<"4. Avsluta "<<endl<<endl; cout<<"Ange val : "; } // main.cpp // InlaÃàmningsuppgift 2 // // Created by Johan Nilsson on 2011-07-09. // Copyright 2011 Consultec Byggprogram AB. All rights reserved. */ #include <iostream> #include <fstream> #include <string> #include <vector> #include <iomanip> using namespace std; struct Register { string titel; string typ; }; void meny(); void nyPost(vector <Register>& mittRegister); void skrivLista(vector <Register> mittRegister, char filnamn[]); void sokResultat(vector<Register> resultatSokning, char filnamn[]); ofstream utFil; ifstream inFil; int main (int argc, const char * argv[]) { vector <Register> mittRegister; bool fortsatt = true; int menyVal; cout << "Ange filens namn: "; char filnamn[30]; cin.get(filnamn, 30); cin.ignore(1000, '\n'); int antalPoster = 0; utFil.open(filnamn, ios::app); if (!utFil) { cout << "Filen går ej att öppna."; exit(1); } while (fortsatt == true) { meny(); cin >> menyVal; cin.ignore(1000, '\n'); switch (menyVal) { case 1: nyPost(mittRegister); for (int i = antalPoster; i < mittRegister.size(); i++) { utFil << mittRegister.at(i).titel << '\t' << mittRegister.at(i).typ << endl ; antalPoster++; } break; case 2: skrivLista(mittRegister, filnamn); break; case 3: sokResultat(mittRegister, filnamn); break; case 4: utFil.close(); fortsatt = false; break; default: cout << "Felaktig inmatning."; break; } } return 0; } void meny() { cout<<"\\\\\\\\\\\\\\ Meny ////////"<<endl; cout<<"1. L√§gg till film"<<endl; cout<<"2. Lista alla filmer"<<endl; cout<<"3. S√∂k titel"<<endl; cout<<"4. Avsluta "<<endl<<endl; cout<<"Ange val : "; } void nyPost(vector <Register>& mittRegister) { cout << "Avsluta inmatningen med #.\n"; cout << "titel: "; Register nyRegisterPost; getline(cin, nyRegisterPost.titel); while (nyRegisterPost.titel != "#") { //Kontroll s√• att alla inmatade typer skrivs p√• samma s√§tt bool correct = false; do { cout << "Typ av media (DVD, Blueray, VHS): "; getline(cin, nyRegisterPost.typ); if (nyRegisterPost.typ == "DVD" || nyRegisterPost.typ == "VHS" ||nyRegisterPost.typ == "Blueray" || nyRegisterPost.typ == "#") { mittRegister.push_back(nyRegisterPost); correct = false; } else { cout << "Felaktigt format, f√∂rs√∂k igen. \n"; correct = true; } } while (correct == true); cout << "titel: "; getline(cin, nyRegisterPost.titel); } } void skrivLista(vector <Register> mittRegister, char filnamn[]) { Register k; inFil.open(filnamn); //skapa 2 tomrader innan resultat for (int i = 0; i < 2; i++) { cout << '\n'; } while (inFil >> k.titel) { inFil.ignore(1000, '\t'); getline(inFil, k.typ); cout << setw(20) << left << k.titel << left << k.typ << endl ; } //skapa 2 tomrader efter resultat for (int i = 0; i < 2; i++) { cout << '\n'; } inFil.close(); } void sokResultat(vector<Register> resultatSokning, char filnamn[]) { bool hittad = false; Register k; inFil.open(filnamn); cout << "Skriv in titeln du s√∂ker: \n"; string soktTitel; string filmTyp; getline(cin, soktTitel); while (inFil >> k.titel) { inFil.ignore(1000,'\t'); getline(inFil, k.typ); if (k.titel == soktTitel) { filmTyp = k.typ; hittad = true; } } if (hittad) { cout << "\nFilmen finns och har formatet " << filmTyp << '.' << endl ; } else{ cout << "\nFilmen finns inte i registret.\n"; } inFil.close(); }