C : lire dans un fichier pb

Résolu
luffy.luck Messages postés 31 Date d'inscription   Statut Membre Dernière intervention   -  
 ila -
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   Statut Contributeur Dernière intervention   329
 
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   Statut Membre Dernière intervention   3
 
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   Statut Contributeur Dernière intervention   329
 
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   Statut Membre Dernière intervention   3
 
yep merci bien je pensais pas que cette fonction marchait comme cela. Merci bien pour ta reponse

luffy
0
ila
 
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