C : lire dans un fichier pb

Résolu/Fermé
luffy.luck Messages postés 31 Date d'inscription vendredi 21 mars 2008 Statut Membre Dernière intervention 18 décembre 2008 - 15 juin 2008 à 17:21
 ila - 24 juin 2008 à 08:38
Bonjour,
je tente de reproduire plus ou moins (plus moins que plus ^^) la fonction "cat" du bash, mais j'ai un probleme avec fscanf :
je voudrais lire les caractères block par block avec la fonction :

void printFile(FILE *fid){

char block[1025];
int n;

while ( !feof(fid) ){
n = fscanf(fid, "%1024s", block);
/* fprintf(stdout, "%d", n);*/
block[n] = '\0';
fprintf(stdout, "%s", block);
}
}

le probleme est que la fonction fscanf me renvoit toujours 1, donc a ben, ca ne marche pas :) : merci d'avance.

luffy

3 réponses

Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009 328
15 juin 2008 à 19:08
Bonsoir,
je crois que fscanf te retourne le nombre d'éléments assignés (d'après le manuel), et donc "1" correspondrait à ton %1024s qui serait le seul élément que tu assignes dans ton fscanf.
Si tu essaies le code suivant, ça fonctionne ? Est-ce que ça t'affiche bien ton bloc ?

void printFile(FILE *fid){

char block[1025];
int n;

while ( !feof(fid) ){
n = fscanf(fid, "%1024s", block);
/* fprintf(stdout, "%d", n);*/
block[1024] = '\0';
fprintf(stdout, "%s", block);
}
} 
0
luffy.luck Messages postés 31 Date d'inscription vendredi 21 mars 2008 Statut Membre Dernière intervention 18 décembre 2008 3
15 juin 2008 à 19:39
en fait ca m'affiche toutes les premieres lettre des mots (toutes collées), et ceci vient du fait que je rajoute la commande de fin de chaine au block (obligation afin de traiter le fprintf) , et comme je l'ajoute a l'index "n" récupéré par fscanf = >1 et bien je n'ai que les premieres lettres. En fait se que je ne comprend pas c'est pourquoi la fscanf me retourne 1 a chaques fois.

merci de ta reponse

luffy
0
Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009 328
15 juin 2008 à 20:17
Si tu fais
fscanf(fid, "%s %d %d", chaine, &i, &j);

par exemple, fscanf va te retourner 3. Si la première assignation se passe bien, mais pas les deux autres, il va te retourner 1.

Comme toi tu n'as qu'une assignation, il te retourne 1 (ce qui veut dire que ça s'est bien passé). Si tu veux récupérer le nombre de caractères lus, regarde peut-être du côté de la fonction "read" (même si c'est plus bas niveau).

Cordialement
0
luffy.luck Messages postés 31 Date d'inscription vendredi 21 mars 2008 Statut Membre Dernière intervention 18 décembre 2008 3
15 juin 2008 à 20:19
yep merci bien je pensais pas que cette fonction marchait comme cela. Merci bien pour ta reponse

luffy
0
yep, bizarrement, moi aussi je pensais que la fonction marchait comme ça....

c'est fort, ça vient peut-être simplement d'un prof de LO22 :d

ila
0