Fscanf !!!!!

César -  
Marden Messages postés 1075 Statut Membre -
Que dois je mettre comme argument à la fonction fscanf pour qu'elle me lise et retourne une ligne entiere ...

En faisant fscanf(f,"%s\n",temp) temp ne recoit que le premier d'une liugne ... le fscanf s'arr^^ete aux espaces ..

y'a t il un moyen d'éviter ça et de faire en sorte que je récupere toute la ligne ... espace compris

2 réponses

Marden Messages postés 1075 Statut Membre 210
 
La fonction scanf (ou fscanf) lit la ligne jusqu'au caractère d'interligne, et charge les différents champs selon les spécifications du format.
Selon K & R (édition 1985), page 142 :
un champ en entrée est défini comme étant une chaîne de caractères qui ne sont pas des caractères d'espacement blanc (espace, tabulation, interligne); il s'étend soit jusqu'au caractère d'espacement blanc suivant, soit jusqu'au moment où l'on atteint la largeur du champ, dans le cas où celle-ci est spécifiée (dans le format).
Le comportement que tu obtiens est donc normal. Il faut donc s'orienter vers une solution de type "getline" telle que décrite dans K & R.
Sinon, vers fgets(dest,maxLen,file) qui, si la taille du buffer est suffisante, et la longueur de la ligne courante inférieure à cette taille, donne le contenu de la ligne, y compris le caractère d'interligne (\n). Le comportement n'est donc pas le même si l'on atteint ou non la fin de ligne, et ne permet pas d'utiliser proprement la fonction strlen pour en connaître la taille (qui exige un \0 final).
Rassure-toi, tout le monde est passé par là !!!
2
Marden Messages postés 1075 Statut Membre 210
 
A mon avis, la solution doit passer par le Kernighan & Ritchie, en commençant à la page 1.
0
Cesar
 
Hein ?
0
Utilisateur anonyme
 
oui oui c'est ce qu'ilk a dit, un (-:

désolé je te charrie mais votre échange est rigolo (-;

kinder.surprise,
le maton du matou
0
asevere Messages postés 13095 Date d'inscription   Statut Webmaster Dernière intervention   426
 
ha ca me fait plaisir marden... je vois qu'on a été a la meme ecole
essai d'addresser ta variable temp>> &temp c'est plus correct mais je sais pas si ca reglera tout le probleme


\__ ',, '    Na kaer eo va Breizh,                   
 ; ; \/      gand ar mor glaz èn-dro dezi ! 
0