Fscanf !!!!!
César
-
Marden Messages postés 1075 Statut Membre -
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
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
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à !!!
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à !!!
A mon avis, la solution doit passer par le Kernighan & Ritchie, en commençant à la page 1.