21. februar 2004 - 19:25Der er
16 kommentarer og 1 løsning
gemme og hente data til highscore
Hej eksperter Jeg har efterhånden fået lavet et program hvor man kan handle med diverse varer. Det eneste jeg mangler er en highscore liste til at fortælle hvem der har klaret sig bedst igennem tiderne... Det jeg ikke helt ved hvordan jeg skal gribe an er hvordan jeg gemmer navn, score og placering i en fil og så henter dem ud igen. jeg har tænkt mig at gemme dem i variabler hver for sig. men hvordan kan jeg have alle disse variabler gemt i en fil for derefter at læse dem ind igen når jeg har brug for og sådan at de rigtige værdier kommer i de rigtige variabler?
er der ikke en måde man slette hele inholdet af en fil? altså slette alt i score.dat i dette tilfælde? bare fordi jeg ville syntes det var smartest at hente alle data ind og evnt ændre nogen hvis en highscore var blevet stykket og så derefter skrive det hele i filen igen. eller en måde at overskrive?
int main() { // Our High Score Table multimap<int, string> HighScoreTable;
// Read from file ifstream is(FILENAME); while(is) { int i; string s; is >> i >> s; if(is) HighScoreTable.insert(make_pair(i, s)); }
// Enter new entry int NyHighScore; string NyNavn; cout << "Indtast ny HighScore og navn: "; cout.flush(); cin >> NyHighScore >> NyNavn; HighScoreTable.insert(make_pair(NyHighScore, NyNavn));
// Only store 10 entries while(HighScoreTable.size() > 10) HighScoreTable.erase(HighScoreTable.begin());
// Write to file, overwrite everything ofstream os(FILENAME); if(!os) { cout << "Failed to open output!" << endl; return EXIT_FAILURE; }
int main() { printf("1:\n"); add("Sleizer",100); showall(); system("pause"); return 0; }
problemet er at score ser ud til at blive uinitialiseret i starten og navnet kommer i små bidder af 1 bogstav pr. styk? hvad gør jeg forkert... jeg behøes ikke kunne udskrive det hele flot eller noget. skal bare kunne smide de rigtige værdier og navne i de rigtige pladser i arrays'ne
ok.. er ved at have fået det til at virke... men mangler lige det sidste.. kan sagtens indlæse filen rigitgt nu problemet ligger i at skrive den sådan at hvir der kommer en værdi der er mellem tidligere værdier skal værdien presses ind imellem... der skal i alt være 50 pladser på listen og min kode ser ud på følgende måde indtil videre:
har prøvet meget i for løkken.. men hvad skal der stå.. meningen er at når den finder en værdi der er lig eller større en en p listen skal ens score føres ind og alle andre rykkes ned... hvis der er 50 score på listen skal den nederste forsvinde sådanat der i alt kun er 50 på listen...
void CHigh::Add() { // check om der overhovedet skal ændres i filen if(m_nPenge > score[49]) { FILE *fp = fopen(FILENAME,"w"); int fnd = 0; for(int i=0;i<49;i++) { if(!fnd && (m_nPenge > score[i])) { fprintf(fp,"%s %d\n","navn",m_nPenge); fnd = 1; } fprintf(fp,"%s %d\n",name[i],score[i]); } fclose(fp); } }
det er din kode med lidt ændringer... mest i udksrivningen..
men i linjen score[n] = atoi(p);
giver debuggeren en Unhandled exception at 0x0049d3dc??? hvad er der galt? jeg har lagt variablerne ind i klassen for min dialog boks
CListCtrl m_ctrlHigh;
CString m_strNavn; int m_nPenge; int m_nSlut; int m_nPlads; char m_chPlads[100]; char m_chScore[100]; CString m_strPlads; int i,n,score[50]; char line[100], name[50][100],*p; CString navn[50]; int penge[50];
men kan ikke se fejlen? hvis du er i tvivl om nogle af navnene i koden eller hvad de er skal du bare spørge...
der er noget i filen... jeg kan også godt se dem indtegnet i min list control... når der kommer fejl er når jeg klader ShowAll() efter jeg har kaldt Add()
når jeg har kørt Add() er score.DAT filen vokset til en størrelse over 100 kb og fuld af en masse tegn... så der må være et sted i Add() der laver rag i det..
NU VIRKER DET:D mange tusind tak for hjælpen... smider lige nogle flere points i hovedet på dig efter alt det hjælp.
Sleizer
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.