Fscanf, pas de stockage de résultat - C - Programmation
Marsh Posté le 04-06-2011 à 04:50:22
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.
Marsh Posté le 04-06-2011 à 14:34:56
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 : |
Ç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+,
Marsh Posté le 04-06-2011 à 17:25:08
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 !
Marsh Posté le 04-06-2011 à 01:21:49
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.
Et donc à l'exécution, voici ce que j'obtiens :
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
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...