You are not allowed to do this.
C : chargement et tri de score
Dernière réponse : dans Programmation
Bonjours !
j'essait de faire un program en C qui :
charge nom et score des meilleur joueur enregistré dans un point texte, compare ces données au score qui vient d'etre fait, si le le score actuel mérite d'etre dans les record a ce moment la remplace le dernier record par le score qui vient d'être fait puis réordonne si besoin le tableau avec un tri a bulle (désolé je sais pas encore mieu faire...)
ensuite, le fichier texte est vidé puis le contenu des tableau ordonnés est recopié dedans.
voila globalement l'algo
au passage, pour éviter d'utiliser ftell, pas fiable parait il j'utilise 2 fichier, un avec les nom et un avec les scores.
les donnée sont stoquée dans une structure.
mais 2 problème se pose :
de 1 le tri a bulle ne tri rien du tout, c'est génant le score actuel reste en dernière position quequesoit sa valeur
de 2 les fichier sont bien vidé mais rien n'est mis a l'intérieur...
sur ce place au code (foireux
)
merci d'avance
j'essait de faire un program en C qui :
charge nom et score des meilleur joueur enregistré dans un point texte, compare ces données au score qui vient d'etre fait, si le le score actuel mérite d'etre dans les record a ce moment la remplace le dernier record par le score qui vient d'être fait puis réordonne si besoin le tableau avec un tri a bulle (désolé je sais pas encore mieu faire...)
ensuite, le fichier texte est vidé puis le contenu des tableau ordonnés est recopié dedans.
voila globalement l'algo
au passage, pour éviter d'utiliser ftell, pas fiable parait il j'utilise 2 fichier, un avec les nom et un avec les scores.
les donnée sont stoquée dans une structure.
mais 2 problème se pose :
de 1 le tri a bulle ne tri rien du tout, c'est génant le score actuel reste en dernière position quequesoit sa valeur
de 2 les fichier sont bien vidé mais rien n'est mis a l'intérieur...
sur ce place au code (foireux
)
#include <stdio.h> #include <stdlib.h> struct fichier { long score; char nom[15]; }; int main() { struct fichier joueur[6]; char chaineNom[15]={0},temp[15]={0}; int inscrit=0;//booléen pour savoir si le score est assez important pour être inscrit(technique du flag) int yappermut=0; long scoreActuel=14,i,tempScore=0; FILE* fichier = NULL; FILE* fichierScore = NULL; fichier = fopen("nom.txt", "r"); fichierScore = fopen("score.txt", "r"); if(fichier != NULL) { for(i=0;i<5;i++) { fgets(joueur[i].nom, 15, fichier);//on inscrit les noms dans la strcucture //puis les scores :) fscanf(fichierScore, "%ld", &joueur[i].score); } for(i=0;i<5;i++) { if (scoreActuel > joueur[i].score) inscrit=1; } if (inscrit) { printf("entrez votre nom\n"); fgets(chaineNom, sizeof chaineNom, stdin); strcpy(joueur[4].nom, chaineNom); joueur[4].score=scoreActuel;//le dernier nom et score sont éliminés while (yappermut) { for(i=4;i>=0;i--)//boucle a l'enver, le 4ème score est le moin bon ! { if (joueur[i].score>joueur[i-1].score) { tempScore=joueur[i].score; strcpy(temp,joueur[i].nom); joueur[i].score=joueur[i].score; strcpy(joueur[i-1].nom,joueur[i].nom);//on échange le nom et le score joueur[i-1].score=tempScore; strcpy(joueur[i-1].nom,temp); /*grace au tri a bulle, on permutte les noms et les scores*/ yappermut=1; } } } printf("voici les scores dans l'ordre : %s, %s, %s , %s, %s", joueur[0].nom,joueur[1].nom,joueur[2].nom,joueur[3].nom, joueur[4].nom); /*maintenant que les tableau sont ordonnés, on vide les fichier texte*/ fclose(fichier); fclose(fichierScore); fichier = fopen("nom.txt", "w+"); fichierScore = fopen("score.txt", "w+"); /*puis on y copie le contenu des tableaux*/ for(i=0;i>5;i++) { fputs(joueur[i].nom, fichier); fputs("\n", fichier); fputs(joueur[i].score, fichierScore); fputs("\n", fichierScore); } } } return 0; }
merci d'avance
Autres pages sur : chargement tri score
Lassé par la pub ? Créez un compte
j'ai pas tout vu, mais, yappermut = 0 avant de rentrer dans le while, 0 en C = false, donc tu ne rentres pas dans le while...
un remarque: le fichier est censé être trié par meilleur score, donc il suffit de comparer le score actuel à celui du dernier, si il est supérieur, tu peux le rajouter.
pour la boucle d'ecriture, la condition du for: i>5 est fausse
voila
EDIT: bsort n'existe pas en standard en C
un remarque: le fichier est censé être trié par meilleur score, donc il suffit de comparer le score actuel à celui du dernier, si il est supérieur, tu peux le rajouter.
pour la boucle d'ecriture, la condition du for: i>5 est fausse
voila
EDIT: bsort n'existe pas en standard en C
bon je suis désolé, je revient, et je sui excédé
ce putain de programme de base a la con ne marche toujours pas, et je n'arrive pas a la corriger ...
le tri ne marche pas bien sur, le nom entré au début remplace les 3 dernière place, ainsi que le score.
la ligne pour copier les score dans le fichier fait tout plantée (si je l'enlève ça plante pas).
aidez moi svp j'en peut plus de ce bordel
code :
ce putain de programme de base a la con ne marche toujours pas, et je n'arrive pas a la corriger ...
le tri ne marche pas bien sur, le nom entré au début remplace les 3 dernière place, ainsi que le score.
la ligne pour copier les score dans le fichier fait tout plantée (si je l'enlève ça plante pas).
aidez moi svp j'en peut plus de ce bordel
code :
#include <stdio.h> #include <stdlib.h> struct fichier { long score; char nom[15]; }; int main() { struct fichier joueur[6]; char chaineNom[15]={0},temp[15]={0}; int inscrit=0;//booléen pour savoir si le score est assez important pour être inscrit(technique du flag) int yappermut=1; long scoreActuel=14,i,tempScore=0; FILE* fichier = NULL; FILE* fichierScore = NULL; fichier = fopen("nom.txt", "r+"); fichierScore = fopen("score.txt", "r+"); if(fichier != NULL && fichierScore != NULL) { for(i=0;i<5;i++) { fgets(joueur[i].nom, 15, fichier);//on inscrit les noms dans le tableau /*on inscrit ensuite les scores dans un autre tableau important, nom[i][12]=score[i], faut pouvoir s'y retrouver quand meme :p */ fscanf(fichierScore, "%ld", &joueur[i].score); } for(i=0;i<5;i++) { if (scoreActuel > joueur[i].score) inscrit=1; } if (inscrit) { printf("entrez votre nom\n"); fgets(chaineNom, sizeof chaineNom, stdin); strcpy(joueur[4].nom, chaineNom); joueur[4].score=scoreActuel;//le dernier nom et score sont éliminés while (yappermut) { yappermut=0; for(i=4;i>=0;i--)//boucle a l'enver, le 4ème score est le moin bon ! { if (joueur[i].score>joueur[i-1].score) { tempScore=joueur[i].score; strcpy(temp,joueur[i].nom); joueur[i].score=joueur[i].score; strcpy(joueur[i-1].nom,joueur[i].nom);//on échange le nom et le score joueur[i-1].score=tempScore; strcpy(joueur[i-1].nom,temp); /*grace au tri a bulle, on permutte les noms et les scores*/ yappermut=1; } } } printf("voici les nom dans l'ordre : %s, %s, %s , %s, %s", joueur[0].nom,joueur[1].nom,joueur[2].nom,joueur[3].nom, joueur[4].nom); printf("voici les score dans l'ordre : %ld, %ld, %ld , %ld, %ld", joueur[0].score,joueur[1].score,joueur[2].score,joueur[3].score, joueur[4].score); /*maintenant que les tableau sont ordonnés, on vide les fichier texte*/ fclose(fichier); fclose(fichierScore); fichier = fopen("nom.txt", "w+"); fichierScore = fopen("score.txt", "w+"); /*puis on y copie le contenu des tableaux*/ for(i=0;i<5;i++) { fprintf(fichier, joueur[i].nom); fprintf(fichierScore, joueur[i].score);//ligne qui plante mysterieusement } } } return 0; }
la syntaxe de fprintf:
donc le code exact est:
ta boucle de tri a pour condition de sortie i>=0 donc i-1 peut etre egale à -1, pour un indice de tableau, c'est pas normal
faut pas perdre espoir
int fprintf (FILE *stream, const char *format, ...);
donc le code exact est:
fprintf (fichier, "%s\n", joueur[i].nom); // ou encore fputs... fprintf (fichierScore, "%ld\n", joueur[i].score); // penser à rajouter le \n dans scanf
ta boucle de tri a pour condition de sortie i>=0 donc i-1 peut etre egale à -1, pour un indice de tableau, c'est pas normal
faut pas perdre espoir
bon excuse de mettre emporté, mais parfois j'ai vraiment l'impression que je m'en sortirai pas...
tu vois, ces dernière vancances j'ai programé un mastermind enconsole, avec plusieur niveau de difficulté, un mode spécial un mode 2joueur et surtout AUCUNS bug...
seulement, les cour tout ça ça fait un mois que je n'ai pas pu programmé, et je me suis dit que j'allais m'y remettre ces vances laz (dans une semaine) et que en attendant je réviserai un peu...
par rapport au mastermind que j'ai réussi tout seul, ce petit programmé que je voulais faire juste pour m'entrainer me paraissait une broutille quoi...
donc je me suis un peu déçu de ne pas y être arrivé...
enfin voila, merci de m'aider
=> en fait heuresement que je révise puisque je me sert pas corectement de fprintf
tu vois, ces dernière vancances j'ai programé un mastermind enconsole, avec plusieur niveau de difficulté, un mode spécial un mode 2joueur et surtout AUCUNS bug...
seulement, les cour tout ça ça fait un mois que je n'ai pas pu programmé, et je me suis dit que j'allais m'y remettre ces vances laz (dans une semaine) et que en attendant je réviserai un peu...
par rapport au mastermind que j'ai réussi tout seul, ce petit programmé que je voulais faire juste pour m'entrainer me paraissait une broutille quoi...
donc je me suis un peu déçu de ne pas y être arrivé...
enfin voila, merci de m'aider
=> en fait heuresement que je révise puisque je me sert pas corectement de fprintf
Citation :
// penser à rajouter le \n dans scanfje ne comprend pas très bien...
bon moi déja j'utilise fgets + sscanf car c'est plus sécurisant et plus "pro" (ok c'est pathétique vu mon niveau mais bon ^^)
et puis, a chaque tour de boucle y'a une ligne de passée non ?
parce que moi, quand le meme nom se met 3 fois et qu'il est réinscrit dans le fichier, les ligns sont passé...
et si je rajoute un "\n" et bien ça m'écrit un nom une ligne sur 2, et ça va tout faire foirré la prochaine fois que j'execute le programme....
Lassé par la pub ? Créez un compte