[affichage] d'un fichier à l'écran

Résolu
davdoo91 Messages postés 31 Date d'inscription   Statut Membre -  
davdoo91 Messages postés 31 Date d'inscription   Statut Membre -
Bonjou,

J'aurais saoir ce qui ne va pas dans ma ligne de programme.
Pour info, je veux afficher ce qu'il y a dans le fichier à l'écran comme ceci:

printf("Nom\n");
fgets(stdout,20,fich);
printf("prenom\n");
fgets(stdout,20,fich);

merci de vos réponses
Configuration: Windows XP
Internet Explorer 6.0

23 réponses

  • 1
  • 2
Résumé de la discussion

Affichage formaté du contenu d’un fichier en C est discuté, avec l’intention d’afficher Nom puis prénom en lisant des lignes du fichier et en les imprimant. Des réponses préconisent de lire dans un tampon, par exemple fgets(tab, sizeof tab, fich), puis d’afficher avec fputs(tab, stdout) ou printf, afin d’éviter d’écrire directement dans stdout. D’autres échanges évoquent la gestion des retours chariot et des terminators, des erreurs potentielles liées à fopen, et l’emplacement des données dans tab qui influence l’affichage. En parallèle, plusieurs préoccupations cross-plateformes (Windows XP, Linux) émergent et la nécessité de traiter le formatage du retour chariot pour obtenir une présentation comme 4/8/1984.

Bobot (l'IA à votre service)
  1. davdoo91 Messages postés 31 Date d'inscription   Statut Membre 2
     
    la normalement ca devrais marcher mais ca m affiche nimporte koi :
    fich = fopen(adher.nom, "r");
    printf("\nNom:");
    fgets(tab,sizeof tab,fich);
    fputs(tab,stdout);
    ou tab déclaré en tableau de caractere
    1
  2. Beurke Messages postés 38 Statut Membre 3
     
    Je pense que c'est:

    fgets(nom,20,stdin);
    etc ...
    
    0
  3. davdoo91 Messages postés 31 Date d'inscription   Statut Membre 2
     
    non mais en fait fich correspond à mon fichier où contient la donné nom, et je veux l'afficher à l'écran.
    Mais sinon j 'ai essayé ta méthode ca ne marche pas.
    0
  4. Stupeflip Messages postés 391 Date d'inscription   Statut Membre Dernière intervention   94
     
    Salut,

    C'est normal que tu arrives pas à afficher, tu saisies dans ta chaîne mais tu affiches pas ta chaîne !
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. davdoo91 Messages postés 31 Date d'inscription   Statut Membre 2
     
    je l'affiche avec stdout non?
    0
  7. Stupeflip Messages postés 391 Date d'inscription   Statut Membre Dernière intervention   94
     
    Tu es sous Linux ?
    0
  8. davdoo91 Messages postés 31 Date d'inscription   Statut Membre 2
     
    non, windows
    0
  9. Stupeflip Messages postés 391 Date d'inscription   Statut Membre Dernière intervention   94
     
    Essaye de passer par une valeur intermédiaire qui stockera la chaine de caractère.

    Sinon c'est quoi l'erreur ? Y a un msg d'erreur ? Ou ça bug ?
    0
  10. Stupeflip Messages postés 391 Date d'inscription   Statut Membre Dernière intervention   94
     
    C'est quoi le nom de ton fichier ?
    Il est dans la structure adher ? nom c est un char* ?
    0
  11. Beurke Messages postés 38 Statut Membre 3
     
    Si on est bien en 'C':
    char tab[100];
    FILE *fich;
    
    fich=fopen("...","r");
    if (fich==NULL)
    {
       bla bla erreur
    }
    else
    {
       fgets(tab,100,fich);
       printf("Nom\n%s\n",tab);
    }
    
    0
  12. Stupeflip Messages postés 391 Date d'inscription   Statut Membre Dernière intervention   94
     
    Vi mais il a l'air de vouloir utiliser stdout directement lui :)
    0
    1. Beurke Messages postés 38 Statut Membre 3
       
      C'est idiot, puisqu'on fait un printf juste avant ! Soit on l'utilise partout, soit on ne l'utilise pas, non ?
      Sinon, à coup de stdout, ça donne:
      char tab[100];
      FILE *fich;
      
      fich=fopen("...","r");
      if (fich==NULL)
      {
         bla bla erreur
      }
      else
      {
         fgets(tab,100,fich);
         fprintf(stdout,"Nom\n%s\n",tab);
      }
      
      0
    2. Stupeflip Messages postés 391 Date d'inscription   Statut Membre Dernière intervention   94
       
      Rien à ajouter ^^ Variable temp et ça roule !
      0
  13. davdoo91 Messages postés 31 Date d'inscription   Statut Membre 2
     
    c bon j ai trouvé merci de vos réponse

    en fait qu en je tester j avais ouvert le fichier en écriture

    puis je le réouvrais en lecture sans l avoir fermé au préalable avec fclose.
    0
  14. davdoo91 Messages postés 31 Date d'inscription   Statut Membre 2
     
    Par contre j'ai une autre question : je voulais savoir comment faire pour supprimer les retours chariot mis dans mon tableau tab.

    Car par exemple dans mon fichier j ai ca:
    4
    8
    1984

    et j aurais aimé l afficher comme ca : 4/8/1984
    0
  15. Beurke Messages postés 38 Statut Membre 3
     
    Je ne suis pas sûr de comprendre. Tu pourrais montrer le fichier d'entrée et la partie du prog. qui affiche la date ?
    0
  16. Stupeflip Messages postés 391 Date d'inscription   Statut Membre Dernière intervention   94
     
    Salut,

    Soit c'est juste pour l'affichage et dans ce cas du peux faire un truc genre
    printf("Date : %c/%c/%c%c%c%c\n",tab[0],tab[1],tab[2],tab[3],tab[4],tab[5]

    Si les retours chariots gênent, tu peux décaler les indices des tab pour éviter cela.

    Soit tu veux absolument avoir un tableau avec un format date
    char tab2[10];
    tab2[0]=tab[0];
    tab2[1]='/';
    ...
    0
  17. davdoo91 Messages postés 31 Date d'inscription   Statut Membre 2
     
    Programe affichage :

    fich = fopen(adher.nom, "r");
    printf("\nNom :");
    fgets(tab,20,fich);
    fputs(tab,stdout);
    printf("prenom : ");
    fgets(tab,20,fich);
    fputs(tab,stdout);
    printf("\ndate de naissance : ");
    fgets(tab,20,fich);
    fgets(tab2,20,fich);
    fgets(tab3,20,fich);

    contenu du fichier :
    nom
    prenom
    4
    8
    1984
    nom de la rue
    ville
    code postale
    sport
    0
  18. Stupeflip Messages postés 391 Date d'inscription   Statut Membre Dernière intervention   94
     
    Tu concatènes tab, tab2 et tab3 après la saisie de la date sans oublier les '/' entre les jours/mois/année.
    0
    1. davdoo91 Messages postés 31 Date d'inscription   Statut Membre 2
       
      et comment tu fais ca?
      0
  19. andejen Messages postés 148 Statut Membre 22
     
    avec la fonction Strcat
    0
  20. Beurke Messages postés 38 Statut Membre 3
     
    Avec strcat :
    strcat(tab,"/");
    strcat(tab,tab2);
    strcat(tab,"/");
    strcat(tab,tab3);
    fputs(tab,stdout);
    
    Mais si tu veux faire vraiment propre :
    printf("%02d/%02d/%04d\n", atoi(tab), atoi(tab2), atoi(tab3) );
    
    Pour explication:
    %02d: Masque pour une donnée entière sur 2 positions zérotée à gauche
    atoi(): Conversion d'une chaîne de caractères en entier
    0
  21. Stupeflip Messages postés 391 Date d'inscription   Statut Membre Dernière intervention   94
     
    Je dirais même plus, faire un sprintf pour avoir le tout dans un char * ^^ C'est encore plus propre ^^ Pis pas besoin de atoi comme ça (sauf si tu veux mettre les 0 devant !
    0
    1. Beurke Messages postés 38 Statut Membre 3
       
      Justement, c'est exprès pour avoir les 0 devant
      ;-)
      0
  • 1
  • 2