12. juni 2002 - 09:38Der er
7 kommentarer og 1 løsning
læse og skrive fra fil
Jeg sidder og er ligeså stille ved at lære at programmere i C. jeg har fået til opgave at lave en highscore liste der bliver skrevet i en alm txt fil.....
så jeg skal bruge 3 meget simpele koder der 1: læser fra filen 2: skriver til filen 3: ser om filen er der (ellers oprettes den)
typedef struct { char Name[11]; unsigned long Score; } defHighScore;
const int maxHighScores = 100; defHighScore highScores[maxHighScores];
int readFile(char *fileName) { FILE *highFile;
/* Læs high-scores fra fil - hvis der ingen er, lav nogle tomme. */ if ((highFile = fopen(fileName, "r+b")) == NULL) { cprintf("High-score filen \'%s\' kunne ikke læses/dannes.\r\n", fileName); return false; }; for (int idx = 0; idx < maxHighScores; idx++) { if (fread(&highScore[idx], sizeof(highScore[idx]), 1, highFile) != 1) { /* Sidste post læst - lav resten tomme. */ for (;idx < maxHighScores; idx++) { sprintf(highScore[idx].Name, ""); highScore[idx].Score = 0; }; }; /* Hvis score ikke kunne læses. }; // Indtil alle high-scores er læst.
fclose(highFile); return true; } // readFile
int writeFile(char *fileName) { FILE *highFile;
/* Læs high-scores fra fil - hvis der ingen er, lav nogle tomme. */ if ((highFile = fopen(fileName, "w+b")) == NULL) { cprintf("High-score filen \'%s\' kunne ikke skrives/dannes.\r\n", fileName); return false; }; for (int idx = 0; idx < maxHighScores; idx++) { if (fwrite(&highScore[idx], sizeof(highScore[idx]), 1, highFile) != 1) { /* Ikke alle poster kunne skrives. */ fclose(highFile); cprintf("Ikke alle poster kunne skrives. (Post nr. %d)", idx + 1); return false; }; /* Hvis score ikke kunne læses. }; // Indtil alle high-scores er læst.
fclose(highFile); return true; } // writeFile
int main(int argc, char *argv[]) { if (argc < 2) { cprintf("FEJL: Angiv navnet på high-score filen.\r\n"); return -1; }
/* Læs highscores fra filen. */ if (!readFile(argv[1])) return -1;
/* Vis high scores. */ cprintf("%-20s %8s\r\n", "Spiller", "Score"); for (int idx = 0; idx < maxHighScores; idx++) { if (strncmp(highScore[idx].Name, "", sizeof(highScore[idx].Name)-1) != 0) { cprintf("%-20s %8lu\r\n", highScore[idx].Name, highScore[idx].Score); } else idx = maxHighScore; };
/* Noget kode til at ændre på highscores. */
/* Skriv de nye high-scores. */ if (!writeFile(argv[1])) return -1;
mouse-the-mighty >> Der er altid en anden måde - om den er lettere er vist en smagsag.
Mit eksempel er ANSI C - Jens B's ANSI C++ (muligvis MVC eller BCB specifikt, det ved jeg ikke) så det er hip som hap.
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.