C++ Einkaufsliste aber wie?
-
arghonaut schrieb:
Und warum wieder getline + string zerpflücken, wenn es ein einfaches cin >> var täte?
bei cin musst du ja selbst die Enter tase besätigen (so weit mir bekannt)
aber ich lese die Werte ja aus einer liste ein, geht das etwa auch mit cin aus eienr Liste?Gruss Nimda4
-
arghonaut schrieb:
Und warum wieder getline + string zerpflücken, wenn es ein einfaches cin >> var täte?
Keine Ahnung, benutze ich nie. Dann halt damit, mir egal. Soll er halt rumprobieren.
-
nimda4 schrieb:
Jetzt muss ich die Daten doch (so wie ich das verstanden habe) zu einem Objekt der Klasse "Waffe" hinzufügen.
Normalerweise mache ich das ja mit z.b:
waffe schwert; schwert.dmg=18; schwert.name="Schwert"; schwert.Preis=300;
Wenn das soweit richtig ist(ist es das?^^), wie kann ich dann machen das mir diese Werte automatisch rein geschrieben werden?
Wenn du nicht gleich die Lösung geben willst dann bitte wenigstens einen Tipp, bin einwenig am verzweifeln
^^
Das ist zwar richtig, aber umständlich.
Du schreibst dir z.B. einen Konstruktor in welchem du die strings bzw. die Werte als Parameter übergibst und der Konstruktor bastelt dir daraus automatisch das entsprechende Objekt bzw. lädt das Objekt mit den Daten.
Hab das ganze bereits programmiert, ist zwar hässlich da keine Lust groß nachzudenken, aber funktioniert.WARNUNG: nicht als beispiel für ordentliches programmieren nehmen, ist sehr geschludert und unschön programmiert. Habe z.B. praktisch keine Kontrollen die den Input auf Fehler prüfen oder ähnliches.
#include <iostream> #include <fstream> #include <vector> #include <string> using namespace std; class Waffe { public: Waffe(string CName,string CDmg,string CKosten){Name = CName;Dmg = CDmg;Kosten=CKosten;} string Name,Dmg,Kosten; }; class Waffenliste { public: void add(Waffe item) { Liste.push_back(item); } vector<Waffe> Liste; }; int main() { Waffenliste liste; ifstream file("waffen.txt"); if(file.good()) { while(!file.eof()) { vector<string> zeile; string line; getline(file,line); do { //generiert Substring und fügt den gleich dem vektor hinzu zeile.push_back(line.substr(0,line.find(" "))); //wenn danach noch ein leerzeichen kommt löscht er bis zu diesem sonst alles if(line.find(" ")!= string::npos) line.erase(0,line.find(" ")+1); else line.erase(); } while(!line.empty()); liste.add(Waffe(zeile[0],zeile[1],zeile[2])); } } file.close(); for(unsigned int i = 0 ; i<liste.Liste.size();i++) cout << "Name: " << liste.Liste[i].Name << "(Dmg " << liste.Liste[i].Dmg << ",Kosten " << liste.Liste[i].Kosten << ")" << endl; return 0; }
Mit der cin variante die vorgeschlagen worden ist geht das aber schöner, aber ich mag cin nicht, kA wieso.
-
nimda4 schrieb:
arghonaut schrieb:
Und warum wieder getline + string zerpflücken, wenn es ein einfaches cin >> var täte?
bei cin musst du ja selbst die Enter tase besätigen (so weit mir bekannt)
aber ich lese die Werte ja aus einer liste ein, geht das etwa auch mit cin aus eienr Liste?Sorry, klar, war zu schnell abgeschickt. Die Intention sollte aber klar sein, denn den operator>> gibt es für alle streams, somit auch für den ifstream.
Grob skizziert:ifstream waffen_file("blubb.txt"); while(Zeilen vorhanden) { int schaden, preis; string name; waffen_file >> name >> schaden >> preis; }
-
Sorry, aber wäre es nicht sinnvoller lieber mal nach einem Buch zu greifen und die Grundlagen zu lernen anstatt dich irgendwie mit einzelnen Code-Schnipseln "durchzuschlagen" ? Villeicht lässt mich da mein Sinn für Pädagogik im Stich, aber falls der Threadersteller daran interessiert ist, wirklich C++ zu lernen wäre das wohl das Sinnvollste.
Ich meine :
#include <stdio.h> #include <tchar.h> #include <stdlib.h> #include <string> #include <time.h> #include <csetjmp> #include <stddef.h> #include <iostream> #include <conio.h> #include <dos.h> #include <conio.h> #include <Windows.h>
-
Namenloser324 schrieb:
nimda4 schrieb:
Jetzt muss ich die Daten doch (so wie ich das verstanden habe) zu einem Objekt der Klasse "Waffe" hinzufügen.
Normalerweise mache ich das ja mit z.b:
waffe schwert; schwert.dmg=18; schwert.name="Schwert"; schwert.Preis=300;
Wenn das soweit richtig ist(ist es das?^^), wie kann ich dann machen das mir diese Werte automatisch rein geschrieben werden?
Wenn du nicht gleich die Lösung geben willst dann bitte wenigstens einen Tipp, bin einwenig am verzweifeln
^^
Das ist zwar richtig, aber umständlich.
Du schreibst dir z.B. einen Konstruktor in welchem du die strings bzw. die Werte als Parameter übergibst und der Konstruktor bastelt dir daraus automatisch das entsprechende Objekt bzw. lädt das Objekt mit den Daten.
Hab das ganze bereits programmiert, ist zwar hässlich da keine Lust groß nachzudenken, aber funktioniert.WARNUNG: nicht als beispiel für ordentliches programmieren nehmen, ist sehr geschludert und unschön programmiert. Habe z.B. praktisch keine Kontrollen die den Input auf Fehler prüfen oder ähnliches.
#include <iostream> #include <fstream> #include <vector> #include <string> using namespace std; class Waffe { public: Waffe(string CName,string CDmg,string CKosten){Name = CName;Dmg = CDmg;Kosten=CKosten;} string Name,Dmg,Kosten; }; class Waffenliste { public: void add(Waffe item) { Liste.push_back(item); } vector<Waffe> Liste; }; int main() { Waffenliste liste; ifstream file("waffen.txt"); if(file.good()) { while(!file.eof()) { vector<string> zeile; string line; getline(file,line); do { //generiert Substring und fügt den gleich dem vektor hinzu zeile.push_back(line.substr(0,line.find(" "))); //wenn danach noch ein leerzeichen kommt löscht er bis zu diesem sonst alles if(line.find(" ")!= string::npos) line.erase(0,line.find(" ")+1); else line.erase(); } while(!line.empty()); liste.add(Waffe(zeile[0],zeile[1],zeile[2])); } } file.close(); for(unsigned int i = 0 ; i<liste.Liste.size();i++) cout << "Name: " << liste.Liste[i].Name << "(Dmg " << liste.Liste[i].Dmg << ",Kosten " << liste.Liste[i].Kosten << ")" << endl; return 0; }
Mit der cin variante die vorgeschlagen worden ist geht das aber schöner, aber ich mag cin nicht, kA wieso.
o.O schludrig? sowas nennst du schludrig?
OMG jetzt fühl ich mich dumm -.-^^Das ist hamemr von dir ich hab mir jetzt das ganze angesehen und versucht nach zuvollziehen und habe daher noch ein paar kleine Fragen:
1. vector<waffe> Liste; und vector<string> zeile; was machen die genau?
2. liste.add(Waffe(zeile[0],zeile[1],zeile[2])); Verstehe ich so: fügt Schwert, 18, 300 zur liste hinzu als Objekt Waffe. Ist das richtig?
3. for(unsigned int i = 0 ; i<liste.Liste.size();i++); Bildet die Liste oder?
Ich hab das Programm gestartet, es geht auf verschwindet dann wieder (trotz system("pause");) und es erscheint ein Pop Up mit dem Text:
"Debug Assertion Failed!Programm..\rpg\rpg\Debug\rpg.exe
Filec:\program files(x86)\microsoft visual studio
10.0\vc\include\vector
Line932Expresion vector subscription out of range
For information on how your programm can cause an assertion failure, see the Visual C++ documentation on asserts.
(Press Retry to debug the application)"
Wie da steht hat das ja demnach etwas mit dem vector zutun?
Vielen Vielen Dank für deine Hilfe bis jetzt du bist mein Held
Gruss
nimda4
-
cvcv schrieb:
Sorry, aber wäre es nicht sinnvoller lieber mal nach einem Buch zu greifen und die Grundlagen zu lernen anstatt dich irgendwie mit einzelnen Code-Schnipseln "durchzuschlagen" ? Villeicht lässt mich da mein Sinn für Pädagogik im Stich, aber falls der Threadersteller daran interessiert ist, wirklich C++ zu lernen wäre das wohl das Sinnvollste.
Ich meine :
#include <stdio.h> #include <tchar.h> #include <stdlib.h> #include <string> #include <time.h> #include <csetjmp> #include <stddef.h> #include <iostream> #include <conio.h> #include <dos.h> #include <conio.h> #include <Windows.h>
Da hast du sicherlich recht.
-
cvcv schrieb:
Sorry, aber wäre es nicht sinnvoller lieber mal nach einem Buch zu greifen und die Grundlagen zu lernen anstatt dich irgendwie mit einzelnen Code-Schnipseln "durchzuschlagen" ? Villeicht lässt mich da mein Sinn für Pädagogik im Stich, aber falls der Threadersteller daran interessiert ist, wirklich C++ zu lernen wäre das wohl das Sinnvollste.
Ich meine :
#include <stdio.h> #include <tchar.h> #include <stdlib.h> #include <string> #include <time.h> #include <csetjmp> #include <stddef.h> #include <iostream> #include <conio.h> #include <dos.h> #include <conio.h> #include <Windows.h>
die anderen liybs hab ich drinn wegen meinem restlichen Code
Und ja ich bin am lernen, jedoch hab ich mein Buch bei meiner Freundin vergessen und kann es erst heute Abend holenGruss
nimda4
-
[quote="nimda4]
die anderen liybs hab ich drinn wegen meinem restlichen Code
Und ja ich bin am lernen, jedoch hab ich mein Buch bei meiner Freundin vergessen und kann es erst heute Abend holenGruss
nimda4[/quote]
Den Code will ich sehen ....
Wie heißt denn Dein Buch? (Aus Interesse)
-
wie heißt denn dein buch? Und das du die header alle benötigst für den restlichen code ist zu bezweifeln
-
cvcv schrieb:
[quote="nimda4]
die anderen liybs hab ich drinn wegen meinem restlichen Code
Und ja ich bin am lernen, jedoch hab ich mein Buch bei meiner Freundin vergessen und kann es erst heute Abend holenGruss
nimda4
Den Code will ich sehen ....
Wie heißt denn Dein Buch? (Aus Interesse)[/quote]
Ich habe das: http://www.amazon.de/von-bis-umfassende-Handbuch-Computing/dp/3836214296/ref=sr_1_4?s=books&ie=UTF8&qid=1334843823&sr=1-4
kann ich dir den Code per PN oder so was schicken?
es ist ein bisschien viel und sehr amateur haft geschrieben *schäm*
(hab alles selbst geschrieben)Gruss
nimda4
-
Hi, ich bin Namenloser.
Jürgen Wolf ist in diesem Forum verschriehen, daher er wohl sehr schlechte Bücher herausbringt.
Kannst du mir deinen Code auch per PN schicken?
-
kingcools schrieb:
Hi, ich bin Namenloser.
Jürgen Wolf ist in diesem Forum verschriehen, daher er wohl sehr schlechte Bücher herausbringt.
Kannst du mir deinen Code auch per PN schicken?Huch das wusste ich ncith :S
Ich melde mich schnell mit einem account an.
-
So ich hab jetzt einen Account sende dir gleich den Code.
Gruss
nimda4
edit du hast eien Email von mir
-
Viel Schlimmer hätte es nicht kommen können... der Autor ist berüchtigt für seine Inkompetenz, was C++ angeht. Du solltest das Buch bei deiner Freundin lassen, vielleicht findet sie noch eine sinnvolle Verwendung dafür. Lernen solltest du daraus besser nicht. Kannst ja spaßeshalber mal hier im Forum suchen, es gibt immer mal wieder Leute, die aus diesem Buch "gelernt" haben und katastrophalen Code präsentieren, der nur vor Fehlern strotzt.
Wenn du wirklich C++ lernen willst solltest du dir ein gutes C++ Buch zulegen, hier im Forum sind einige gelistet.
-
DocShoe schrieb:
Viel Schlimmer hätte es nicht kommen können... der Autor ist berüchtigt für seine Inkompetenz, was C++ angeht. Du solltest das Buch bei deiner Freundin lassen, vielleicht findet sie noch eine sinnvolle Verwendung dafür. Lernen solltest du daraus besser nicht. Kannst ja spaßeshalber mal hier im Forum suchen, es gibt immer mal wieder Leute, die aus diesem Buch "gelernt" haben und katastrophalen Code präsentieren, der nur vor Fehlern strotzt.
Wenn du wirklich C++ lernen willst solltest du dir ein gutes C++ Buch zulegen, hier im Forum sind einige gelistet.Wow das ist ja brutal wie hier alle sagen das der so schlecht ist :S
Da kauf ich mir mal ein sinnvolles Buch und es ist nru Schrott -.-
Hab es mir gerade erst am Montag gekauft und jetzt darf ich es schon weg werfen :(^^Ich werde mir nun ein neues Bestelle wie wäre es mit:
"Visual C++ 2010 Entwicklerbuch: Grundlagen, Techniken, Profi-Know-how"?
Gruss und Danke für die Information xD
nimda4
-
[quote="nimda4"][quote="Namenloser324"]
nimda4 schrieb:
2. liste.add(Waffe(zeile[0],zeile[1],zeile[2])); Verstehe ich so: fügt Schwert, 18, 300 zur liste hinzu als Objekt Waffe. Ist das richtig?
3. for(unsigned int i = 0 ; i<liste.Liste.size();i++); Bildet die Liste oder?
Ich hab das Programm gestartet, es geht auf verschwindet dann wieder (trotz system("pause");) und es erscheint ein Pop Up mit dem Text:
"Debug Assertion Failed!Programm..\rpg\rpg\Debug\rpg.exe
Filec:\program files(x86)\microsoft visual studio
10.0\vc\include\vector
Line932Expresion vector subscription out of range
For information on how your programm can cause an assertion failure, see the Visual C++ documentation on asserts.
(Press Retry to debug the application)"
Wie da steht hat das ja demnach etwas mit dem vector zutun?
Vielen Vielen Dank für deine Hilfe bis jetzt du bist mein Held
Gruss
nimda4
-
Also erstmal: lass dich nicht von meiner Namensgebung irritieren, bin sehr schlecht im Finden von passenden Namen für Variablen.
Was die machen steht eigentlich direkt dabei:
Liste ist eine Instanz bzw. ein Objekt vom Typ vector<Waffe>, also im Endeffekt nichts weiter als ein Speicher für Objekte des Typs Waffe.
Speichert also quasi "Waffen"
In vector<string> Zeile hab ich einfach die einzelnen Teile einer Zeile aus der Textdatei gespeichert, also wenn da steht schwert 10 300, dann ist Zeile[0] == "schwert", Zeile[1] == "10".... -
japp, ruft den Konstruktor von Waffe auf.
-
Nee, das gibt sie in der Konsol aus
hast du denn eine Textdatei am richtigen ort mit dem Namen? Irgendwas scheint da zu groß zu werden bei dir
-
-
nimda4 schrieb:
Ich werde mir nun ein neues Bestelle wie wäre es mit:
"Visual C++ 2010 Entwicklerbuch: Grundlagen, Techniken, Profi-Know-how"?
Lass die Finger davon und schau in die FAQ. Obiges Buch lehrt nicht C++ sondern C++/CLI was wiederum eine eigenständige Sprache ist, deren Bedeutung eher gering ist.
Ich habe noch neue Bücher bei mir rumfliegen, nur habe ich diese schon einem anderen angeboten dem ich zumindest bis zum Wochenende Zeit lassen will. Ggf. kannst du mich ja mal kontaktieren.
-
[quote="kingcools"][quote="nimda4"]
Namenloser324 schrieb:
nimda4 schrieb:
2. liste.add(Waffe(zeile[0],zeile[1],zeile[2])); Verstehe ich so: fügt Schwert, 18, 300 zur liste hinzu als Objekt Waffe. Ist das richtig?
3. for(unsigned int i = 0 ; i<liste.Liste.size();i++); Bildet die Liste oder?
Ich hab das Programm gestartet, es geht auf verschwindet dann wieder (trotz system("pause");) und es erscheint ein Pop Up mit dem Text:
"Debug Assertion Failed!Programm..\rpg\rpg\Debug\rpg.exe
Filec:\program files(x86)\microsoft visual studio
10.0\vc\include\vector
Line932Expresion vector subscription out of range
For information on how your programm can cause an assertion failure, see the Visual C++ documentation on asserts.
(Press Retry to debug the application)"
Wie da steht hat das ja demnach etwas mit dem vector zutun?
Vielen Vielen Dank für deine Hilfe bis jetzt du bist mein Held
Gruss
nimda4
-
Also erstmal: lass dich nicht von meiner Namensgebung irritieren, bin sehr schlecht im Finden von passenden Namen für Variablen.
Was die machen steht eigentlich direkt dabei:
Liste ist eine Instanz bzw. ein Objekt vom Typ vector<Waffe>, also im Endeffekt nichts weiter als ein Speicher für Objekte des Typs Waffe.
Speichert also quasi "Waffen"
In vector<string> Zeile hab ich einfach die einzelnen Teile einer Zeile aus der Textdatei gespeichert, also wenn da steht schwert 10 300, dann ist Zeile[0] == "schwert", Zeile[1] == "10".... -
japp, ruft den Konstruktor von Waffe auf.
-
Nee, das gibt sie in der Konsol aus
hast du denn eine Textdatei am richtigen ort mit dem Namen? Irgendwas scheint da zu groß zu werden bei dir
Danke für die Antowrten das ist ja hammer
Ja das file ist am richtigen Ort im Debuger zeigt es mir an das es die Datei eingelesen hat und ich sehe auch Schwert 18 300 und dann macht es den durch udn geht zum nexten.
Geht das Programm so bei dir und welchen Compailer verwendest du?
Gruss
nimda4
-
-
Google bitte nach Bücherempfehlungen, hier gabs im Forum schon einige Threads über das Thema ( google es trotzdem, die Forensuche ... naja sagen wir mal google kanns besser
).
Mit dem Buch von J.W hast du halt ein ungünstiges erwischt, allerdings ist das auch den Rezensionen zu entehmen. Es gibt viele 5-Sterne, aber einige 1-Sterne deren Kritik sich alle auf fachliches Wissen stützen, ganz im Gegensatz zu den 5-Sterne Kommentatoren, die sich von flüßiger Sprache beeinflussen liesen.