Comment afficher une ligne apartir d'un fichier?

Résolu
asstel Messages postés 54 Statut Membre -  
asstel Messages postés 54 Statut Membre -
Bonjour,
j'ai un fichier contient des livres
je veux afficher le contenu
supposons le fichier contient:

2012
programmer en C
linkin park
2013
programmer en java
zozor

par exemple ici le titre est composé
quand je l'affiche voici le resultat que j'obtiens

code: 2012
titre: programmer
auteur: en

code:c
titre:linkin
auteur:park

mais je veux obtenir
code:2012
titre: programmer en c
auteur: linkin park

comment je fais? svp

4 réponses

  1. [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   1 108
     
    Salut asstel,

    le %s de scanf va effectivement s'arrêter au prochain caractère "blanc", donc à l'espace.

    Pour utiliser les fonctions de la famille scanf pour lire une ligne jusqu'au retour à la ligne, tu peux cependant faire comme cela :

        /* (...) */
        char c;
    
        if (scanf("%49[^\n]",livre.titre) == 1) {
            printf("J'ai récupéré : [%s]\n", livre.titre);
            c = getchar();   /* purger '\n' */
        } 


    http://www.cplusplus.com/reference/cstdio/scanf/

    ou utiliser fgets, qui est fait pour cela, en retirant le '\n' qu'il capturera.

    Dal
    1
    1. asstel Messages postés 54 Statut Membre
       
      j'ai pas vraiment comprie
      mais je vais essayé merciii :)
      0
    2. asstel Messages postés 54 Statut Membre
       
      pouvez vous m'expliquer? svp
      0
    3. asstel Messages postés 54 Statut Membre
       
      ça marche :D explique moi svp
      %49[^\n] veux dire quoi?

      merciiiiiiiiiiiiii :)
      0
    4. [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   1 108
       
      Salut asstel,

      http://www.cplusplus.com/reference/cstdio/scanf/

      A format specifier for scanf follows this prototype:

      %[*][width][length]specifier

      Where the specifier character at the end is the most significant component, since it defines which characters are extracted, their interpretation and the type of its corresponding argument:

      (...)

      [^characters] Negated scanset Any number of characters none of them specified as characters between the brackets.

      Donc
      %49[^\n]
      signifie : prends jusqu'à 49 caractères dans le flux, qui ne soient pas
      '\n'
      (le retour à la ligne).


      Dal
      0
    5. asstel Messages postés 54 Statut Membre
       
      okkk merciiii infiniment :D
      0
  2. asstel Messages postés 54 Statut Membre
     
    voici le code:
    #include <stdio.h>
    #include <stdlib.h>
    
    typedef struct Livre Livre;
    struct Livre
    {
    	char code[15];
    	char titre[50];
    	char Auteur[50];
    
    };
    
    void Affich_Livre ()
    {
        FILE* f=NULL;
        Livre livre;;
        f=fopen("FLivre.txt","r");
        rewind(f);
    
        while(!feof(f)){
        	fscanf(f,"%s\n%s\n%s\n",livre.code,livre.titre,livre.Auteur);
        	printf("CODE:%s\n",livre.code);
        	printf("TITRE\t:%s\n",livre.titre);
        	printf("L'AUTEUR\t:%s\n",livre.Auteur);
        						}
        fclose(f);
    
    };
    
    int main()
    {
    	Affich_Livre();
    	return 0;
    }
    
    0
  3. asstel Messages postés 54 Statut Membre
     
    il n y a pas une solution pour lire ligne par ligne.??
    0
  4. asstel Messages postés 54 Statut Membre
     
    j'ai essayé
    fgets
    mais un autre probleme se pose
    0