Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
916 connectés 

  FORUM HardWare.fr
  Programmation
  C

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1285463
Sophs
Posté le 17-01-2006 à 13:46:40  profilanswer
 

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

mood
Publicité
Posté le 17-01-2006 à 13:46:40  profilanswer
 

n°1285465
chrisbk
-
Posté le 17-01-2006 à 13:51:49  profilanswer
 

le quatuor habituel fopen fread fwrite fclose  

n°1285485
Sophs
Posté le 17-01-2006 à 14:03:58  profilanswer
 

je regarde tout ça, merci

n°1285661
Sophs
Posté le 17-01-2006 à 16:20:50  profilanswer
 

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

n°1285663
chrisbk
-
Posté le 17-01-2006 à 16:22:05  profilanswer
 

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

n°1285671
jimipage
déclarer c'est fatiguant
Posté le 17-01-2006 à 16:26:37  profilanswer
 

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
n°1285675
jimipage
déclarer c'est fatiguant
Posté le 17-01-2006 à 16:28:22  profilanswer
 

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
n°1285731
Sophs
Posté le 17-01-2006 à 16:58:00  profilanswer
 

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

n°1285751
francky06l
Posté le 17-01-2006 à 17:14:28  profilanswer
 

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

n°1285761
Sophs
Posté le 17-01-2006 à 17:24:24  profilanswer
 

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...

mood
Publicité
Posté le 17-01-2006 à 17:24:24  profilanswer
 

n°1285783
francky06l
Posté le 17-01-2006 à 17:35:23  profilanswer
 

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.
 

n°1285800
Sophs
Posté le 17-01-2006 à 17:45:11  profilanswer
 

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 ;-)

n°1285819
francky06l
Posté le 17-01-2006 à 17:57:27  profilanswer
 

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 ..

n°1285826
Sophs
Posté le 17-01-2006 à 18:02:24  profilanswer
 

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?

n°1285843
francky06l
Posté le 17-01-2006 à 18:22:03  profilanswer
 

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

n°1285933
Sophs
Posté le 17-01-2006 à 20:12:06  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

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

 

Sujets relatifs
[Résolu][C# & XML] Valider un fichier xml selon un schémaRenommer un fichier avec la date du jour
[RESOLU] Rechercer & remplacer dans un fichierCrée un fichier d'aide type .chm
Tri d'un fichierjavascript : lire le contenu d'une page
lire un texte et en repertorier chaque mot?Lire et Ecrire dans un fichier
Plus de sujets relatifs à : C et pas C++, lire et écrire dans un fichier


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR