IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

comment afficher un tableau ?


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Novembre 2010
    Messages
    221
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 221
    Par défaut comment afficher un tableau ?
    Salut !

    J'ai écris un programme qui marche parfaitement, j'ai un tout petit problème dans la fonction afficher(), j'essaye d'afficher un tableau avec des printf(c-a-d le dessiner) mais sans qu'il y aura un décalage quand je rajoute des valeurs, je sais pas trop comment faire, veuillez m'aider svp, voici mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    void afficher()
    {int i;
    printf("/***************Table des symboles IDF*************/\n");
     
    printf("	 _________________________________________________________ \n");
    		printf("	|     TABLE DES SYMBOLES                    |\n");
    		printf("	                                            |\n"); 
    		printf("	|   name      |  type         |    val             |\n"); 
    		printf("	 -------------------------------------------- \n");
    for(i=0;i<1000;i++)
    if(tab[i].state==1)
    {
                   printf("              %s             %s",tab[i].name,tab[i].type);
     
    if((strcmp(tab[i].type,"reel")==0)||(strcmp(tab[i].type,"entier")==0))
                   printf("                                             %f\n",tab[i].val);
    else
    printf("\n");
    }
    printf("\n/***************Table des symboles mots clés*************/\n");
     
    printf("	 ___________________________________________________________ \n");
    		printf("	|     TABLE DES SYMBOLES                    |\n");
    		printf("	                                            |\n"); 
    		printf("	|   name           |  type                  |\n"); 
    		printf("	 ------------------------------------------- \n");
    for(i=0;i<40;i++)
    if(tabm[i].state==1)
    {
                    printf("        |     %s            |           %s          | \n  ",tabm[i].name,tabm[i].type);
     
    }
    printf("\n/***************Table des symboles séparateurs*************/\n");
     
    printf("	 _________________________________________________________ \n");
    		printf("	|     TABLE DES SYMBOLES                    |\n");
    		printf("	                                            |\n"); 
    		printf("	|   name      |  type                       |\n"); 
    		printf("	 ------------------------------------ \n");
    for(i=0;i<40;i++)
    if(tabs[i].state==1)
    {
                     printf("              %s            %s \n",tabs[i].name,tabs[i].type);
     
    }
    }

  2. #2
    Membre éclairé Avatar de Ngork
    Homme Profil pro
    Barbare IT
    Inscrit en
    Avril 2009
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Barbare IT
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 160
    Par défaut printf
    Une solution simple : tu peux compléter tes "%s" dans ton formatage avec printf ...

    Par exemple : "%-10.10s" affichera au plus les dix premiers caractères de la chaîne fournie en argument, et si cette chaîne est plus courte que dix caractères, elles sera complétée par des blancs à droite.

    Pour des explications plus complètes sur le formatage avec les fonctions de la famille printf, tu peux aller voir cette page, par exemple : http://man.developpez.com/man3/printf.3.php !

  3. #3
    Membre éclairé
    Inscrit en
    Novembre 2010
    Messages
    221
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 221
    Par défaut
    alors j'ai suivi ton conseil et je l'ai essayé sur un bout de code, mais j'ai un problème, voici d'abord mon bout de code d'affichage

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    #include <stdio.h>
    #include <stdlib.h>
    #include<string.h>
     
    int main()
    {
     
     
    char c1[5]="ttttt";
     
    char c2[8]="kkkkkkkk";
     
     
     
     
    printf("	 ____________________________________________\n");
    		printf("	|     TABLE DES SYMBOLES     |\n");
    		printf("	                             |\n"); 
    		printf("	|   name             |  type      |\n"); 
    		printf("	 ----------------------------- \n");
     
     
                    printf("        |%-40s | %-40s| \n  ",c1,c2);
                    printf("      |%-40s | %-40s| \n  ",c2,c1);
     
     
    }
    Le problème c'est que dans l'affichage de c2 j'ai une concaténation de c2 et c1 au lieu d'avoir
    ttttt              kkkkkkkk
    kkkkkkkk     ttttt
    j'ai eu
    ttttt                  kkkkkkkktttt
    kkkkkkkkttttt    ttttt
    donc la c2 m'affiche c2+c1 je ne vois pas où est le problème
    merci

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Ton problème vient de ces lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char c1[5]="ttttt";
    char c2[8]="kkkkkkkk";
    La chaîne de caractères "ttttt" (idem "kkkkkkkk") est constituée de 6 caractères ({'t', 't', 't', 't', 't', '\0'}) et non seulement 5 comme tu le spécifies avec char c1[5].
    Ainsi ton tableau c1 ne comportant pas le '\0' final délimitant la fin de la chaîne, la fonction printf() ne s'arrêtera pas tant quelle n'en aura pas rencontré un.

    Enfin ta chaîne "ttttt" (qui visiblement "par chance" a un '\0' situé après) étant située en mémoire juste après "kkkkkkkk", fait que lorsque tu affiches "kkkkkkkk", tu affiches les deux.

    Deux solutions donc :
    1. soit tu rajoutes 1 par rapport au nombre de caractères afin de bien inclure le '\0' final :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      char c1[6] = "ttttt";
      char c2[9] = "kkkkkkkk";
    2. soit tu utilises des pointeurs constants :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      const char *c1 = "ttttt";
      const char *c2 = "kkkkkkkk";

  5. #5
    Membre éclairé Avatar de Ngork
    Homme Profil pro
    Barbare IT
    Inscrit en
    Avril 2009
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Barbare IT
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 160
    Par défaut
    Tes chaînes c1 et c2 ne sont pas initialisées à la bonne taille, il manque un char pour le \0 de fin de chaîne, c'est pour cela qu'elles se retrouvent dans ton cas concaténées.
    Bref, pour faire simple, si tu veux déclarer un mot de 12 lettres, tu réserves un espace mémoire de 13 caractères. et le plus simple, c'est encore de laisser le préprocesseur calculer cet espace lui-même : )

    Pour ce qui est du formatage avec printf(), dis-toi que le moins permet d'aligner à gauche, que le premier nombre avant le point indique la longueur minimale, et que le nombre après le point indique la longueur maximale de la chaîne cible, ce qui donne donc ceci en reprenant ton code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    int main()
    {
      char c1[]="ttttt";
      char c2[]="kkkkkkkk";
     
      printf("   ----------------------------------------- \n");
      printf("  |            TABLE DES SYMBOLES           |\n");
      printf("   ----------------------------------------- \n");
      printf("  |         name       |        type        |\n");
      printf("   ----------------------------------------- \n");
     
      printf("  |%-20.20s|%-20.20s|\n",c1,c2);
      printf("  |%-20.20s|%-20.20s|\n",c2,c1);
     
     
      return 0;
    }

  6. #6
    Membre éclairé Avatar de Ngork
    Homme Profil pro
    Barbare IT
    Inscrit en
    Avril 2009
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Barbare IT
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 160
    Par défaut
    Histoire de te donner un exemple plus complet, je te propose ton code modifié ci-dessous qui centre la chaîne dans la colonne au lieu de l'aligner à gauche (le code n'est pas optimal, c'est juste une illustration de ce que tu peux faire pour formater ta sortie) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    int main()
    {
      char c1[]="ttttt";
      /* la chaîne c2 est supérieure à la taille de la colonne pour tester l'efficacité de la méthode */
      char c2[]="kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk";
     
      int avant_c1=0,apres_c1=0;
      int avant_c2=0,apres_c2=0;
     
      if (strlen(c1)<20)
        {
          avant_c1=(20-strlen(c1))/2;
          apres_c1=20-(avant_c1+strlen(c1));
        }
     
      if (strlen(c2)<20)
        {
          avant_c2=(20-strlen(c2))/2;
          apres_c2=20-(avant_c2+strlen(c2));
        }
     
     
      printf("   ----------------------------------------- \n");
      printf("  |            TABLE DES SYMBOLES           |\n");
      printf("   ----------------------------------------- \n");
      printf("  |         name       |        type        |\n");
      printf("   ----------------------------------------- \n");
     
      printf("  |%*s%.20s%*s|%*s%.20s%*s|\n",avant_c1,"",c1,apres_c1,"",avant_c2,"",c2,apres_c2,"");
      printf("  |%*s%.20s%*s|%*s%.20s%*s|\n",avant_c2,"",c2,apres_c2,"",avant_c1,"",c1,apres_c1,"");
     
     
      return 0;
    }

Discussions similaires

  1. Comment afficher un tableau dans la jsp
    Par safsouff dans le forum Struts 1
    Réponses: 3
    Dernier message: 29/05/2008, 08h57
  2. Réponses: 2
    Dernier message: 27/03/2007, 10h25
  3. [XSLT] Comment afficher un tableau à partir d'un xml complexe ?
    Par druidev dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 14/11/2006, 17h27
  4. [MySQL] Comment afficher mon tableau
    Par phpaide dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 20/04/2006, 15h12
  5. Comment afficher un tableau dans TStringGrid ?
    Par doubledj dans le forum Composants VCL
    Réponses: 3
    Dernier message: 19/09/2005, 02h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo