Highscore
-
MasterTobi schrieb:
char n,a,m,e; cout<<"name: "; cin>>n>>a>>m>>e;
Was soll denn das sein? Hast du schonmal den Begriff "String" gehört?(und das "fstream close("hey.txt");" ist auch sinnlos - korrekt müsste es lauten "out.close();")
-
fstream close("hey.txt")
damit ging es halt:)un des mit string funzt irgednwie nicht
wie funktioniert das den mit string?
-
MasterTobi schrieb:
fstream close("hey.txt")
damit ging es halt:)Was ging damit? Du versuchst, die bereits geöffnete Datei nochmal neu zu öffnen (was je nach Bedingungen tatsächlich funktionieren kann, aber vermutlich in einem Fehler endet). Erst der Dtor des ofstream schließt die Datei - und der wird aufgerufen, wenn sie (in Zeile 16) aus dem Scope fällt.
un des mit string funzt irgednwie nicht
wie funktioniert das den mit string?
Was hast du denn probiert?
richtig müsste es so aussehen:
std::string name; cin>>name; ... out << "Spieler "<<name << " "<<"Erreichte % "<< punkte<< '\n' ;(wobei ich in der Highscore-Datei nur die Namen und Punktzahlen speichern würde)
PS: <fstream.h> und <iostream.h> sind extremst veraltet - korrekt heißen die Header <fstream> und <iostream>. (außerdem brauchst du noch <string> für die Klasse std::string)
-
ok probier ich ma
p.s ....h sind nicht veraltet
hab nur keine lust
#include <iostream>
used namespace stdoder so zu schrieben
-
MasterTobi schrieb:
p.s ....h sind nicht veraltet
Doch, sind sie - die offiziellen C++ Standardheader haben keine Dateiendung. (iostream.h existiert noch auf einigen System und enthält eine Prä-Ansi Version der IOStreams cin/cout, fstream.h ist mir bisher noch nie untergekommen)
-
cool danke das mit dem string
mein prob war immer:
#include <string.h>
string name;statt
...
std::string name;
-
Ja, das kommt heraus, wenn man nicht die korrekten Header einbindet
Im Gegensatz zu <fstream.h> existiert der Header <string.h> nämlich tatsächlich - hat aber gar nichts mit der C++ Klasse (std::)string zu tun. Die <string.h> enthält ein ganzes Sortiment an Funktionen zur Verarbeitung von C-Strings (nullterminierte char-Arrays), die C++ von C geerbt hat.
-
ah ok
ich danke dir
hab noch eine frage kann man irgendwie die text datei sotieren?
ich find einfach nix dazu:(
mfg
-
Die Datei nicht - die wird so geschrieben, wie die Daten reinkommen. Aber die Daten, die du im Programm verwendest, kannst du sortieren - für dich am einfachsten wäre es wohl, die Paare aus Name und Punktzahl in einer map<int,string> zu speichern.
-
naja bin noch so noob sag ich ma

also die daten die eingelesen werden aus der text datei
kann man sotieren, so hab ich es jetzt vertanden
was ich nicht verstehe ist map int, string
sry
mfg
-
Schau dir mal ein gutes C++ Tutorial an - oder meinen Magazinartikel "Aufbau der STL", dort findest du auch eine Erklärung zu map<>.
(in Kurzfassung: map<> ist eine Sammlung von Wertepaaren - die sortiert nach dem ersten Wert verwaltet werden können)
-
ok danke mach ich mal

mfg
-
irgendwie raff ich das alles net.
kannst du mir ein tipp geben?ich les den inhalt der txt ein in "x" un gebe sie aus.
müsst ich des dann alles mit arrays machen?mfg
-
Wie hast du denn deine Highscore-Datei aufgebaut? (ich würde das oben verwendete "X hat Y Punkte erreicht" abkürzen zu einer Liste mit X und Y)
-
also mein hihgscore is nur :
//highscore anfang { ofstream out("highscore.dll",ios::app); out << "Spieler: "<<name<<" "<<nachname<< ", "<<"Erreichte %: "<< dummheit<<", "<<"Verf"<<ue<<"gbare Joker: "<<joker<< '\n' ;//'\n' neue zeile fstream close("highscore.dll"); } fstream open("highscore.dll"); char x; ifstream in("highscore.dll"); cout<<"\t\t\t\tHighscore"<<endl; cout<<endl; while (in.get(x)) cout << x; //highscore ende
-
Wie gesagt, ich würde den gesamten Rattenschwanz in der Datei weglassen und nur den Namen und die Punkte speichern:
//Ausgabe: out<<name<<' '<<dummheit<<' '<<joker<<endl; //Einlesen: in>>name>>dummheit>>joker; cout << "Spieler: "<<name<<" "<<nachname<< ", "<<"Erreichte %: "<< dummheit<<", "<<"Verf"<<ue<<"gbare Joker: "<<joker<<endl;
-
ich hatte des ma so probiert aber hat nich gefunzt ich werd ma deinen code benutzen
-
ok danke er geht:)
so un wie schaff ich es jetzt "dummheit" zu sotieren
mfg
-
Du fasst alle drei Werte zu einer struct/class zusammen, spendierst ihr einen Vergleichsoperator und packst alle Werte in eine set<>:
struct entry { string name; int dummheit,joker; }; bool operator<(const entry& l, const entry& r) { return l.dummheit<r.dummheit; } ... set<entry> scores; entry val; while(infile>>val.name>>val.dummheit>>val.joker) scores.insert(val); for(set<entry>::iterator pos=scores.begin();pos!=scores.end();++pos) cout<<"Spieler: "<<pos->name", "<<"Erreichte %: "<< pos->dummheit<<", "<<"Verf"<<ue<<"gbare Joker: "<<pos->joker<<endl;(die nächste Verbesserung wäre es noch, aus entry eine vollwertige Klasse zu machen, die sich selbst um Einlesen und Ausgeben kümmert)
-
Aber wenn die Highscore erst mal fertig ist, dann ist der Rest vom Spiel ganz einfach.
