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

  FORUM HardWare.fr
  Programmation
  C

  Fscanf, pas de stockage de résultat

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Fscanf, pas de stockage de résultat

n°2080317
mister bor​is
Coin coin !
Posté le 04-06-2011 à 01:21:49  profilanswer
 

Bonjour à tous !
 
Depuis quelque temps, je débute en C, et j'ai commencé à travailler sur les fichiers, les chaines et tout.
 
Mon but est de faire un programme de recherche dans un texte, et je bloque sur la fonction fscanf.
 
En effet je l'utilise comme ceci, ce n'est pas le programme original, mais je l'utilise de cette façon.
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <iostream>
  5. #include <fstream>
  6. int main()
  7. {
  8. FILE* texte = NULL;
  9. char chaine[] = "50 30 22 Jean";   //chaine quon mettra dans le fichier
  10. char prenom[50];                   //chaine pour stocker le prenom
  11. int chiffres[3] = {0,0,0};         //tableau pour stocker les chiffres
  12. texte = fopen("texte.txt","w+" );   //ouverture/creation lect/ecrit
  13. fputs(chaine,texte);               //chaine qui va dans le fichier texte.txt
  14. printf("Dans le texte on a : %s",chaine);      //affichage de la chaine
  15. printf("\n\nVariables avant fscanf : %d, %d et %d\n\n",chiffres[0],chiffres[1],chiffres[2]);//Affichage des variables avant le fscanf
  16. printf("FSCANF" );
  17. fscanf(texte,"%d %d %d %s",&chiffres[0],&chiffres[1],&chiffres[2],prenom); //on effectue le fscanf
  18. printf("\n\nLes chiffres sont %d, %d et %d\nLe prenom est %s\n",chiffres[0],chiffres[1],chiffres[2],prenom); //on affiche les resultats
  19. fclose(texte);
  20. return 0;
  21. }


 
Et donc à l'exécution, voici ce que j'obtiens :
https://lh5.googleusercontent.com/-xRj8muIiPv4/TelrkHeLwVI/AAAAAAAAAjU/rQ4MOjdV1GM/fscanf.png
 
Les variables n'ont pas changé. J'ai trouvé pas mal de tuto (siteduzero notamment), j'ai fouillé sur l'utilisation de la fonction fscanf, et je ne vois pas bien ce que j'ai raté.
 
Ca fait quelque temps que je me penche sur le problème, et j'aimerais bien un peu d'aide  :D  
 
 
Merci pour la lecture, et vos futures réponses.
 
Boris.


Message édité par gilou le 04-06-2011 à 14:37:08

---------------
Iriver h320, toujours au top en fait...
mood
Publicité
Posté le 04-06-2011 à 01:21:49  profilanswer
 

n°2080327
mister bor​is
Coin coin !
Posté le 04-06-2011 à 04:50:22  profilanswer
 

Ok tout le monde, j'ai trouvé une réponse à mon problème.
 
Je viens de voir qu'avec une ouverture en lecture seule, donc avec le paramètre "r" ça marche.
 
Est ce que quelqu'un pourrait m'expliquer pourquoi du coup ? Probleme de droits du fichier ?
 
Dans le programme que j'ai fait donc, ça se passe comme ça :
ouverture du fichier en écriture
on met la chaine dans le fichier
on ferme le fichier
on l'ouvre en lecture seule
fscanf, et là ça marche !
 
Pas grave si je n'ai pas de réponse sur les droits, peut etre que si quelqu'un a un souci similaire, il aura une réponse.
 


---------------
Iriver h320, toujours au top en fait...
n°2080377
gilou
Modérateur
Modzilla
Posté le 04-06-2011 à 14:34:56  profilanswer
 

Ce qui va pas dans le code posté (aux questions de droit près):
 
Quand tu fais fputs(chaine,texte); ta position dans le fichier est a la fin de la chaîne écrite. Quand tu fais ensuite fscanf(texte,"%d %d %d %s",&chiffres[0],&chiffres[1],&chiffres[2],prenom); tu fais une lecture après ce que tu viens d'écrire.
Il faut donc avant d'écrire stocker la position dans le fichier, écrire, revenir à la position stockée, et enfin lire ce qu'on vient d'écrire.    
long pos = ftell(texte);  // stockage de la position dans le fichier
fputs(chaine,texte);
....    
fseek(texte, pos, SEEK_SET); // retour à la position stockée
fscanf(texte,"%d %d %d %s",&chiffres[0],&chiffres[1],&chiffres[2],prenom);
 
Notes que quand c'est la première ligne du fichier, on peut simplifier ceci (mais la procédure précédente est la plus générale et la plus utile):
fputs(chaine,texte); // écriture de la première ligne du fichier
....    
rewind(texte); // retour en début de fichier
fscanf(texte,"%d %d %d %s",&chiffres[0],&chiffres[1],&chiffres[2],prenom);
 

Citation :

Dans le programme que j'ai fait donc, ça se passe comme ça :  
ouverture du fichier en écriture  
on met la chaine dans le fichier  
on ferme le fichier  
on l'ouvre en lecture seule  
fscanf, et là ça marche !

 
Ça marche parce que tu écris la première ligne, et que quand tu fermes et qu'ensuite tu rouvres le fichier, tu es positionné en début de fichier.
 
A+,


Message édité par gilou le 04-06-2011 à 14:36:38

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2080387
mister bor​is
Coin coin !
Posté le 04-06-2011 à 17:25:08  profilanswer
 

Ok !
 
Effectivement je n'avais pas pensé à ma position dans le fichier que je lisais.
 
L'utilisation du rewind c'est vrai, est plus simple dans mon cas par exemple. Dans des cas plus complexes, j'utiliserais le stockage de position.
 
Je pensais qu'il y avait des soucis de droit d'accès aux fichiers, qui parfois me dépasse :)
 
En tout cas merci pour ta réponse très claire !


---------------
Iriver h320, toujours au top en fait...

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

  Fscanf, pas de stockage de résultat

 

Sujets relatifs
SQL afficher le résultat avec plus de decimales[php] Envoyer resultat requete plusieurs ligne par mail
Mettre le résultat en hypertexteMettre résultat d'un fichier php externe dans une variable
Besoin d'aide concernant résultat suivi de colisrequete SQL qui ne donne pas le bon resultat
[sh] stocker le résultat d'un script shell interactifOracle - pas de résultat sur poste client
Recuperer un resultat dans un fichier txt ..Un résultat en trop dans ma requête
Plus de sujets relatifs à : Fscanf, pas de stockage de résultat


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