Affichage jolie d'un tablea de structure en C

Fermé
aaeezzrr - 28 déc. 2008 à 15:07
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 28 déc. 2008 à 17:32
Bonjour tout le monde :)

Voilà , en fait j'ai un tableau de structure remplis du genre
struct personne{ char nom[25] , char prenom[25] etc ........... }
struct personne liste[100] ;

admettons ma liste est remplie, je voudrais afficher sous forme de tableau la liste. Donc je voudrais que tous les noms soient bien allignés sur une même colonne, que tous les prenoms soient alignés sur une meme colonnes etc...

j'ai essayé avec des tabulation \t mais c'est très approximatif, si il y a un nom trop grand ou trop petit ca marche pas du tout... Je sais pas s'il y a une astuce pour faire ce genre de chose simplement.

merci de votre aide .
A voir également:

3 réponses

scriptiz Messages postés 1424 Date d'inscription dimanche 21 décembre 2008 Statut Membre Dernière intervention 14 septembre 2023 425
28 déc. 2008 à 15:17
A mon avis si tu utilise le str_len en incluant le string.h, tu peux calculer la taille de tes nom, prénoms, ... et remplir ce qu'il manque par des espaces pour garder tout ça aligné.

Exemple, avec 20 caractères maxi pour le nom et pareil pour le prénom :
|Nom+++++++++++++++++|Prenom++++++++++++++|
|--------------------|--------------------|
|Smith+++++++++++++++|John++++++++++++++++|
|McCain++++++++++++++|Georges+++++++++++++|

(les + représentent des espaces ^^

Donc à partir de Smith, str_len me retourn 5, je fait donc (le nombre de colonnes attribué) - (longueur du nom) ce qui donne 20 - 5 = 15. Avec ce 15 je fait une petite boucle for qui va m'afficher 15 espaces.

Enfin c'est assez lourd comme solution mais bon je début en C et je n'ai pas d'autres idées à part utiliser les \t mais comme tu dit c'est variable si les noms sont trop longs ou trop courts l'un par rapports aux autres.
0
Oui j'avais pensé aussi à cette solution , mais en effet , c'est un peu lourd :D ... à défaut d'en trouver une autre je ferais comme ca je pense :S...

merci de ta réponse, si quelqu'un a une autre idée , je prends :D


:)
0
sadektlili Messages postés 139 Date d'inscription mardi 16 décembre 2008 Statut Membre Dernière intervention 3 avril 2010 4
28 déc. 2008 à 17:13
utilise deux et trois \t

exp: printf("%s\t\t\t%s",.............);
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
28 déc. 2008 à 17:32
Salut,

Les tabulation ne sont pas toujours la meilleurs solutions.
Apprends utiliser printf
Voici un exemple
lami20j@debian:~/trash$ cat ccm24_aligner.c
#include<stdio.h>

int main()
{
        char *nom[3] = {
                "INTEL",
                "MAC",
                "LINUX",
        };
        char *prenom[3] = {
                "Pentium",
                "Os",
                "Debian",
        };
        int i;
        for(i=0;i<3;++i)
                printf("%-20s%-20s\n",nom[i],prenom[i]);
        return 0;
}
lami20j@debian:~/trash$ gcc ccm24_aligner.c
lami20j@debian:~/trash$ ./a.out
INTEL               Pentium
MAC                 Os
LINUX               Debian
0