C : lire dans un fichier pb
Résolu
luffy.luck
Messages postés
31
Date d'inscription
Statut
Membre
Dernière intervention
-
ila -
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
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
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 ?
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); } }
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
merci de ta reponse
luffy
Si tu fais
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
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