Bonjour,
Je suis en train de développer un jeu, et j'ai un problème concernant le score. En effet, je souhaite enregistrer le score à la fin de la partie dans un fichier .csv. Mais je veux que ce score se trie automatiquement à la fin de la partie. C'est à dire que mon fichier doit être rangé du plus grand score au plus petit.
Voici mon code :
La fonction my_explode :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 FILE* file; char **tab; char score_text[20] = ""; int score_file; file = NULL; file = fopen("score.csv", "r+"); if (file != NULL) { while (fgets(score_text, 50, file) != NULL) { tab = my_explode(score_text, ';'); score_file = strtol(tab[0], (char **)NULL, 10); //Si le score actuel est plus grand que le score de la ligne lu if (score > score_file) { fseek(file, -(sizeof(score_text)), SEEK_CUR); sprintf(score_text, "%d;%d;\n", score, time); fputs(score_text, file); break; } tab = 0; } fclose(file); }
La variable score est récupéré en argument de ma fonction de sauvegarde, ainsi que ma variable time.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 char **my_explode(char *str, char separator) { char **res = NULL; int nbstr = 1; int len; int from = 0; int i; int j; res = (char **) malloc(sizeof (char *)); len = strlen(str); for (i = 0; i <= len; ++i) { if ((i == len) || (str[i] == separator)) { res = (char **) realloc(res, ++nbstr * sizeof (char *)); res[nbstr - 2] = (char *) malloc((i - from + 1) * sizeof (char)); for (j = 0; j < (i - from); ++j) res[nbstr - 2][j] = str[j + from]; res[nbstr - 2][i - from] = '\0'; from = i + 1; ++i; } } res[nbstr - 1] = NULL; return res; }
Le problème est que le fputs écrit en fin de fichier et non à la position voulu, c'est à dire avant le score plus petit que celui fait dans la partie actuelle.
Si vous avez besoin de plus de renseignements, n'hésitez pas à me demander. Merci pour votre aide.
[EDIT] L'enregistrement du score est inscrit dans le fichier de la façon suivante : score;time;\n
Cordialement,
Ginwu
Partager