C et pas C++, lire et écrire dans un fichier

C et pas C++, lire et écrire dans un fichier - C - Programmation

Marsh Posté le 17-01-2006 à 13:46:40    

Bonjour, je fais appel à vous parce que je suis un peu perdue: je connais bien le C++ mais à je fais un jeu en C pour mon neveu et du coup je nage... En fait je reste bloquée au moment ou je veux enregistrer les scores d'une partie àl'autre. Il faut pour ça que j'enregistre dans un fichier le score actuel, je veux noter aussi le meilleur score et le plus mauvais. Mais je ne connais pas la procédure pour ouvrir, lire et écrire sur un fichier en C. La procédure du C++ ne marche pas forcément...
Donc si quelqu'un peut me donne run exemple...
Merci

Reply

Marsh Posté le 17-01-2006 à 13:46:40   

Reply

Marsh Posté le 17-01-2006 à 13:51:49    

le quatuor habituel fopen fread fwrite fclose  

Reply

Marsh Posté le 17-01-2006 à 14:03:58    

je regarde tout ça, merci

Reply

Marsh Posté le 17-01-2006 à 16:20:50    

ok, j'ai bien compris l'utilisation de ces fonctions, mais comment je fais pour mettre la première ligne de mon fichier dans une variable, la deuxième dans une autre... ? et ce dans le but de les comparer...
Merci d'avance

Reply

Marsh Posté le 17-01-2006 à 16:22:05    

heuh ? décrit un peu mieux car la je vois pas trop

Reply

Marsh Posté le 17-01-2006 à 16:26:37    

Sophs a écrit :

ok, j'ai bien compris l'utilisation de ces fonctions, mais comment je fais pour mettre la première ligne de mon fichier dans une variable, la deuxième dans une autre... ? et ce dans le but de les comparer...
Merci d'avance


 
Si j'ai bien compris, tu écrit dans un fichier à partir des résultats obtenus dans le programme.
Dans ce cas, il vaut mieux conserver les variables en mémoire (dans un ou plusieurs tableaux par exmple) et s'en reservir, plutôt que de les supprimer pour les récupérer ensuite dans le fichier.


---------------
un perlien qui programme salement
Reply

Marsh Posté le 17-01-2006 à 16:28:22    

Sophs a écrit :

ok, j'ai bien compris l'utilisation de ces fonctions, mais comment je fais pour mettre la première ligne de mon fichier dans une variable, la deuxième dans une autre... ? et ce dans le but de les comparer...
Merci d'avance


 
par contre, si tu veux que d'une partie à l'autre les résultats soient récupérés, il faut utiliser fgets


---------------
un perlien qui programme salement
Reply

Marsh Posté le 17-01-2006 à 16:58:00    

En fait, je voudrais récupérer d'une partie à l'autre mes données... le but de ce fichier est d'enregistrer les scores et des statistiques. Du coup à chaque partie ces données vont changer...
Je pensais donc mettre ça dans un tableau... du genre int tab [10]; et mettre chaque ligne de mon fichier à l'intérieur du tableau. Là mon pb est d'utiliser fread (je n'ai trouvé que l'explication pour fgets dc je ne sais pas de quels paramètres il a besoin). Ensuite je veux effacer mon fichier, comparer la première ligne du tableau avec le score en cours et reremplir mon fichier avec les nouveaux éléments... Voila en détail... merci pour votre aide

Reply

Marsh Posté le 17-01-2006 à 17:14:28    

En fait, utiliser fread / fwrite :
 
FILE* fp;
int tab[10];
 
// Ouverture  
   fopen("fichier.dat", "r+b" ) ; // ouverture en lecture /ecriture binaire
 
// lecture :
 
fread(tab, sizeof(int), 10, fp);
 
// revenir au debut du fichier
 
rewind(fp);
 
// ecriture
 
fwrite(tab, sizeof(int), 10, fp);
 
fclose(fp);
 
Un peu court mais tout est la

Reply

Marsh Posté le 17-01-2006 à 17:24:24    

Merci pour ces points là. Je ne comprends par contre pas du tout ça:
fread(tab, sizeof(int), 10, fp);  
 
Je ne comprends pas les paramètres... qu'il lui faut... Je suis vraiment désolée...

Reply

Marsh Posté le 17-01-2006 à 17:24:24   

Reply

Marsh Posté le 17-01-2006 à 17:35:23    

en fait fread et fwrite prennent les meme parametres, voila une description que j'ai trouve dans une doc ..
 
size_t fwrite(
   const void *buffer,
   size_t size,
   size_t count,
   FILE *stream  
);
Parameters
buffer  
Pointer to data to be written.  
size  
Item size in bytes.  
count  
Maximum number of items to be written.  
stream  
Pointer to FILE structure.  
Return Value
fwrite returns the number of full items actually written, which may be less than count if an error occurs. Also, if an error occurs, the file-position indicator cannot be determined.
 

Reply

Marsh Posté le 17-01-2006 à 17:45:11    

mais donc là on lit et on écrit dans le tableau... c'est ça? ce n'est pas mon fichier que je lis? dc pour mon fichier est-ce que je peux mettre:  
fread (bluf, sizeof bluf, fp);? en fait c'est la même chose que pour fgets...
en tous les cas, merci, je vais essayer d'avancer, mais je vais surement re être bloquée et revenir... merci et à bientôt ;-)

Reply

Marsh Posté le 17-01-2006 à 17:57:27    

fgets te retourne une chaine de caractere, dans l'exemple que j'ai donne cela veut dire que tu sauve les donnees en binaire (int) ..
En gros, tu lis dans ton tableau directement les int :
 
fread(tab, sizeof(int), 10, fp);
 
apres tu fais tes calculs dans ton tableau :
 
tab[1] += 10;
tab[2] = 100;
etc..
 
ensuite tu peux ecrire directement le contenu du tableau sur ton fichier (oublie pas le rewind si tu veux repartir au debut du fichier)
 
fwrite(tab, sizeof(int), 10, fp);
 
Avec fgets, il fadrait que tu sauvegarde en format "chaines" :
 
ouverture ; fp = fopen("fichier.txt", "r+t" );  // t = texte mode
ensuitee pour lire, soit tu sauves/lit une valeur par ligne, soit tu mets toutes les valeurs sur la meme ligne ..
 
exemple avec une valeur par ligne
 
lecture :
           char buffer[128];
           i = 0;
           while(fgets(buffer, 128, fp) != NULL)
           {
              tab[i++] = atoi(buffer); (aussi sscanf("%d", &tab[i]) )          
           }
 
/ pour ecrire
 
           rewind(fp);
 
           for(i=0; i < 10; i++)
              fprintf(fp, "%d\n", tab[i]);
 
En gros en binaire, tu ne pourras pas voir les donnees avec notepad par exemple, en mode texte oui ..

Reply

Marsh Posté le 17-01-2006 à 18:02:24    

Alors, si j'ai bien compris, fgets renvoit des caractères (char) donc ce n'est pas ça dont j'ai besoin. Ensuite, moi je veux d'abord ouvrir le fichier, puis mettre tout dans un tableau, de là j'ai bien compris pour les calculs et ensuite je réinjecte tout dans le fichier ligne par ligne mais il faut que je l'efface avant...
En fait tout est clair en ce qui concerne le tableau, par contre le fichier il ne faut pas que j'utilise fgets mais fread si je veux du binaire et pas des caracteres. SInon qd je vais les mettre dans le tableau je ne pourrais plus faire de calcul dessus, non?

Reply

Marsh Posté le 17-01-2006 à 18:22:03    

Mais pourquoi tu veux lire tout dans un tableau et remplir ligne/ligne ..Ca ne peut pas marcher, soit tu fais tout en binaire, soit tout en chaine..
Donc, lire le fichier dans un tableau :
 
int tab[10];
FILE *fp = fopen("fichier.dat", "r+b" );
 
// la lecture est la
fread(tab, sizeof(int), 10, fp); tu lis dans le tableau tab, 10 fois la taille dun int a partir du fichier fp
 
// tu modifie ton tableau ..
tab[0] = 452;
etc..
 
// tu n'as pas besoin d'effacer le fichier, si tu le "rembobine" et ecrit par dessus :
 
rewind(fp);  // rembobine fp (on se met au debut de fichier)
fwrite(tab, sizeof(int), 10, fp);    // on ecrit le tableau qui contient 10 elements de taille d'un int  dans le fichier fp
 
fclose(fp);  // fermeture (a ne pas oublier)
 
Voila , peut etre ca va mieux avec ca, sinon mail moi perso si tu as deja du code

Reply

Marsh Posté le 17-01-2006 à 20:12:06    

et bien voila qui est fait dans ta boite perso... merci à toi

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed