C : lire dans un fichier pb

Résolu
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
Configuration: Linux
Firefox 3.0

3 réponses

  1. Contributeur
    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
    1. 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
      1. Contributeur
        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
    2. yep merci bien je pensais pas que cette fonction marchait comme cela. Merci bien pour ta reponse

      luffy
      0
      1. 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