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 :

Annuaire telephonique


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2013
    Messages : 70
    Par défaut Annuaire telephonique
    Bonjour,

    J'essaye de créer un annuaire téléphonique,en suivant
    les informations d'un site.http://www.telechargercours.com/prog...es-structures/

    Et j'ai déja un petit problème, c'est à dire que je voudrais pouvoir saisir
    le nom et le numéro de téléphone d'une personne mais je n'y arrive pas.
    (je débute avec les structures)

    Je vous remercie d'avance pour votre aide !

    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
     
    #include <stdio.h>
    #include <stdlib.h>
     
    typedef struct Personne Personne;
    struct Personne{
      char nom[32];
      int num[16];
    };
     
    typedef struct Carnet Carnet;
    struct Carnet{
      int Personne[20];
      int n;//compteur indique le nombre de persone dans le tableaux
    };
     
    void creer(Personne p2);
     
     
    int main()
    {
        Personne p1;
        creer(Personne p1);
     
        return 0;
    }
     
    void creer(Personne p2)
    {
        printf("saisir le nom de cette personne:\n");
        scanf("%c", p2->nom);
        printf("saisir le numero de cette personne:\n");
        scanf("%d", p2->num);
     
    }

  2. #2
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    et bienvenue sur nos forums

    Commençons par le commencement...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void creer(Personne p2);
    Possible mais la modification ne sera pas propagée à la variable au retour de la fonction appelante, vaut mieux passer un pointeur comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void creer(Personne * p2);
    et dans le main ton appel se fera alors ansi:
    Donc ici on passe l'adresse de la variable pour que les modifications soient prises en compte lorsque la fonction sera finie. L'appel comme tu l'as fait est faut car tu passes le type de la variable en plus or, ce n'est pas comme ça qu'on fait.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void creer(Personne * p2)
    {
        printf("saisir le nom de cette personne:\n");
        scanf("%c", p2->nom);
        printf("saisir le numero de cette personne:\n");
        scanf("%d", p2->num);
    }
    Je n'aime pas scanf, surtout lorsqu'on débute comme toi, utilise plutôt la fonction fgets qui elle au moins est sécurisée. En t'orientant sur cette fonction, je te fait alors la remarque que le numéro de téléphone peut aussi être stocké dans un tableau de char, ce qui est plus logique, aucun intérêt à ce que ce soit dans un tableau d'entiers, du moins pour le moment et au pire des cas, tu pourras toujours convertir la chaîne en valeur numérique si besoin.

    Donc je te fait modifier ta structure ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    struct Personne{
      char nom[32];
      char num[16];
    };
    Et ta fonction de saisie comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void creer(Personne * p2)
    {
        printf("saisir le nom de cette personne:\n");
        fgets (p2->nom, 32, stdin);
        printf("saisir le numero de cette personne:\n");
        fgets (p2->num, 16, stdin);
    }
    Prend également l'habitude d'utiliser des constante symbolique lorsque tu utilises des tableaux statiques comme ici, surtout lorsque tu es amené à utiliser les même valeurs que la taille des tableau lors des saisies ou autres donc tu pourrais avoir deux constante que tu déclares en début de code juste après tes include:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #define NOM 32
    #define TEL 16
    Que tu peux utiliser ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    struct Personne{
      char nom[NOM];
      char num[TEL];
    };
    ou encore:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void creer(Personne * p2)
    {
        printf("saisir le nom de cette personne:\n");
        fgets (p2->nom, NOM, stdin);
        printf("saisir le numero de cette personne:\n");
        fgets (p2->num, TEL, stdin);
    }
    C'est ce qu'il faut faire si tu veux un code plus lisible et plus maintenable car le jour où tu veux modifier une de ces valeurs, tu n'auras à le faire que sur ta constante c'est tout, plus besoin de parcourir tout le code pour modifier x fois la même valeur

    Pour la déclaration de tes structures, tu peux au lieu de faire comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    typedef struct Personne Personne;
    struct Personne{
      char nom[32];
      char num[16];
    };
    faire ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    typedef struct {
      char nom[32];
      char num[16];
    }Personne;
    C'est pareil mais tu économise une instruction et c'est plus lisible je trouve.

    Je pense en effet que tu as encore beaucoup à lire sur le C, j'espère seulement que tu l'as étudié une première fois en lisant entièrement ton livre et non pas que tu te sois arrêté à certains concepts en te disant que le reste aller venir sur le tas
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  3. #3
    Membre Expert Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    791
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 791
    Par défaut
    Bonjour,

    Dans l'exercice, il est dit:

    Créer une structure Personne pouvant contenir ces informations (nom et téléphone). Le nom peut contenir 32 caractères et le numéro 16 caractères.
    Mais, en C, une chaine de caractère se termine toujours par le caractère \0, donc, en tenant compte des remarques de Franck.H, nous aurons
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    typedef struct {
      char nom[NOM+1];
      char num[TEL+1];
    }Personne;
    Il n'y a pas que ça, mais autant commencer par avoir un bon code pour l'entrée des valeurs

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2013
    Messages : 70
    Par défaut
    Pour ce qui est de l'apprentissage du C, j'en ai déjà fait pas mal en DUT GEII et en stage,mais il n'y avait pas vraiment de structure et pointeur(Le seul langage haut niveau qu'on a bien approfondis c'est le JAVA).
    Je n'ai pas vraiment de livre j'apprends avec divers site sur internet, et le problème c'est qu'il ne développe pas vraiment des exemples proche de ce que je fais.

    Pour ce qui est du projet de l'annuaire, la j'ai remis le programme à jour mais cette fois ci on me demande de crée une fonction qui ajoute un nouveau personnage et je ne vois pas comment faire ...

    Rq: j'ai laissé le scanf juste parce que j'ai l'habitude de travailler avec.

    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
     
    #include <stdio.h>
    #include <stdlib.h>
     
    #define NOM 32
    #define NUM 16
     
    /***Structure***/
    typedef struct {
      char nom[NOM];
      char num[NUM];
    }Personne;
     
     
    typedef struct{
      int Personne[20];
      int n;//compteur indique le nombre de persone dans le tableaux
    }Carnet;
     
     
    /*****Prototype***/
    void Initialiser(Personne *pIn);
    void creer(Personne *p2);
    void AfficheP(Personne *pAf);
     
    /**Principale***/
    int main()
    {
        Personne p1;//Personne p1 est un pointeur ?
     
        Initialiser(&p1);
     
        creer(&p1);//car on envoi une @
        AfficheP(&p1);
        return 0;
    }
    /***Fonction***/
    void Initialiser(Personne *pIn)
    {
        char i;
     
        for(i=0;i<32;i++)
        {
        pIn->nom[i]=0;
        }
        for(i=0;i<16;i++)
        {
        pIn->num[i]=0;
        }
    }
     
    void creer(Personne *pCr)
    {
        printf("saisir le nom de cette personne:\n");
        scanf("%s",pCr->nom);
        printf("saisir le numero de cette personne:\n");
        scanf("%s",pCr->num);
    }
     
    void AfficheP(Personne *pAf)
    {
        printf("La personne s'appelle:\n %s \n",pAf->nom);
        printf("Numero:\n %s \n",pAf->num);
    }
     
    void Add(Personne *pAj)
    {
     
    }

  5. #5
    Membre chevronné
    Homme Profil pro
    Cadre informatique
    Inscrit en
    Avril 2013
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Cadre informatique

    Informations forums :
    Inscription : Avril 2013
    Messages : 183
    Par défaut
    Alors, plusieurs points:

    0/ Après comme te l'as fait remarquer Franck.H et edgarjacobs, tu veux 32 et 16 caractères pour NOM et NUM. Il faut donc mettre un +1 dans tes tableaux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char nom[NOM+1];
    char num[NUM+1];
    Il y a le \0 à prendre en compte comme dernière case!
    0'/ Et non Personne n'est pas un pointeur ^^ Tu as défini la structure comme étant un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef struct Personne
    . Il n'y a pas d'étoiles à ce que je peux voir.
    Si ce qui t'intrigue est le &p1 dans l'entrée de toutes tes fonctions c'est parce que tu les as définies telles qu'elles acceptent en entrée un pointeur qui est l'adresse d'un élément et donc tu envoie &p1 <=> l'adresse de p1, ta personne
    0''/ Cool! Tu as une fonction d'initialisation c'est assez rare d'en voir une
    Essaye d'initialiser ton Carnet par la même occasion, comme ça pas besoin de créer une nouvelle fonction d'initialisation pour ton carnet.
    1/ Pense aux indentations si c'est pas le cas (je te dis ça parce que je vois tout sur la même ligne ^^)
    2/ Tu as déjà fait l'entête de ta fonction: c'est simple propre et tout bon
    2'/ Change peut être juste le nom en AddP comme tu as nommé les autres fonctions
    3/ Oublie pas du coup son prototype dans ta liste de prototypes en haut du programme
    4/ Ensuite comment remplir ta fonction c'est ça? Qu'est ce que tu dois faire pour ajouter une personne a ton annuaire? Créer son nom et numéro de téléphone ET ensuite l'ajouter a ton répertoire (appel a la fonction creerP puis ajouter cette personne dans le tableau de ta structure, et bien évidemment ne pas oublier d'incrémenter ton n puisque tu as pris une place pour enregistrer un nouveau contact)

    Voilou, à toi d’implémenter et bonne chance

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2013
    Messages : 70
    Par défaut
    J'ai essayé de faire quelque chose, la fonction AfficheC ne marche pas du tout
    et addP marche mais je suis pas sur que mon stockage dans le carnet fonctionne.

    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
     
    #include <stdio.h>
    #include <stdlib.h>
     
    #define NOM 32
    #define NUM 16
     
    /***Structure***/
    typedef struct {
        char nom[NOM+1];//prise en compte du '\0' en fin de tableau
        char num[NUM+1];
    }Personne;
     
     
    typedef struct{
        int Personne[20];
        int n;//compteur indique le nombre de persone dans le tableau
    }Carnet;
     
     
    /*****Prototype***/
    void Initialiser(Personne *pIn,Carnet *cIn);
    void creerP(Personne *p2);
    void AfficheP(Personne *pAf);
    void AddP(Personne *pAj,Carnet *cAj);
    void AfficheC(Carnet *cLecture);
     
    /**Principale***/
    int main(int argc,char *argv[])
    {
        Personne p1;
        Carnet c1;
     
        Initialiser(&p1,&c1);
     
        AddP(&p1,&c1);
        //AfficheP(&p1);
        AfficheC(&c1);
        return 0;
    }
    /***Fonction***/
    void Initialiser(Personne *pIn,Carnet *cIn)//Mise à 0
    {
        char i;
        //Initialisation de Personne
        for(i=0;i<32;i++)
        {
        pIn->nom[i]=0;
        }
        for(i=0;i<16;i++)
        {
        pIn->num[i]=0;
        }
        //Initialisation du Carnet
        for(i=0;i<19;i++)
        {
        cIn->Personne[i]=0;
        }
        cIn->n=0;
    }
     
    void creerP(Personne *pCr)//Créer une seule personne
    {
        printf("saisir le nom de cette personne:\n");
        scanf("%s",pCr->nom);
        printf("saisir le numero de cette personne:\n");
        scanf("%s",pCr->num);
    }
     
    void AfficheP(Personne *pAf)//Affiche une seule personne
    {
        printf("La personne s'appelle:\n %s \n",pAf->nom);
        printf("Numero:\n %s \n",pAf->num);
    }
     
    void AddP(Personne *pAj,Carnet *cAj)//Créer une personne et l'ajoute au carnet
    {
        creerP(pAj);
        cAj->Personne[cAj->n]=pAj;//On stocke dans Personne de Carnet le premier personnage
        cAj->n=(cAj->n)+1;//On incrémente de 1 la constante n
    }
     
    void AfficheC(Carnet *cLecture) //Affiche le carnet
    {
        char i;
     
        for(i=0;i<20;i++)
        {
        printf("%s a pour numero %s \n"((cLecture->Personne[i]).nom),((cLecture->Personne[i]).num));
        }
    }

  7. #7
    Membre chevronné
    Homme Profil pro
    Cadre informatique
    Inscrit en
    Avril 2013
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Cadre informatique

    Informations forums :
    Inscription : Avril 2013
    Messages : 183
    Par défaut
    Citation Envoyé par bouritosse Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    void AfficheC(Carnet *cLecture) //Affiche le carnet
    {
        char i;
     
        for(i=0;i<20;i++)
        {
        printf("%s a pour numero %s \n"((cLecture->Personne[i]).nom),((cLecture->Personne[i]).num));
        }
    }
    Pourquoi un char?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    (cLecture->Personne[i]).nom
    // et 
    (cLecture->Personne[i]).num)
    Tu cherches à renvoyer quelle valeur ici?

    EDIT: Pour les réponses que tu vas avoir au-dessus, je te donne une indication de ce qu'il va falloir changer ensuite

    Indice:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    typedef struct {
        char nom[NOM+1];//prise en compte du '\0' en fin de tableau
        char num[NUM+1];
    }Personne;
     
     
    typedef struct{
        int Personne[20];
        int n;//compteur indique le nombre de persone dans le tableau
    }Carnet;
    Tu as créés un tableau nommé Personne contenant des int, alors qu'un Carnet est censé contenir des Personnes Donc il faut revoir le type de ton tableau je pense

  8. #8
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 840
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par bouritosse Voir le message
    J'ai essayé de faire quelque chose, la fonction AfficheC ne marche pas du tout
    et addP marche mais je suis pas sur que mon stockage dans le carnet fonctionne.

    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
     
    #include <stdio.h>
    #include <stdlib.h>
     
    #define NOM 32
    #define NUM 16
     
    /***Structure***/
    typedef struct {
        char nom[NOM+1];//prise en compte du '\0' en fin de tableau
        char num[NUM+1];
    }Personne;
     
     
    typedef struct{
        int Personne[20];
        int n;//compteur indique le nombre de persone dans le tableau
    }Carnet;
     
     
    /*****Prototype***/
    void Initialiser(Personne *pIn,Carnet *cIn);
    void creerP(Personne *p2);
    void AfficheP(Personne *pAf);
    void AddP(Personne *pAj,Carnet *cAj);
    void AfficheC(Carnet *cLecture);
     
    /**Principale***/
    int main(int argc,char *argv[])
    {
        Personne p1;
        Carnet c1;
     
        Initialiser(&p1,&c1);
     
        AddP(&p1,&c1);
        //AfficheP(&p1);
        AfficheC(&c1);
        return 0;
    }
    /***Fonction***/
    void Initialiser(Personne *pIn,Carnet *cIn)//Mise à 0
    {
        char i;
        //Initialisation de Personne
        for(i=0;i<32;i++)
        {
        pIn->nom[i]=0;
        }
        for(i=0;i<16;i++)
        {
        pIn->num[i]=0;
        }
        //Initialisation du Carnet
        for(i=0;i<19;i++)
        {
        cIn->Personne[i]=0;
        }
        cIn->n=0;
    }
     
    void creerP(Personne *pCr)//Créer une seule personne
    {
        printf("saisir le nom de cette personne:\n");
        scanf("%s",pCr->nom);
        printf("saisir le numero de cette personne:\n");
        scanf("%s",pCr->num);
    }
     
    void AfficheP(Personne *pAf)//Affiche une seule personne
    {
        printf("La personne s'appelle:\n %s \n",pAf->nom);
        printf("Numero:\n %s \n",pAf->num);
    }
     
    void AddP(Personne *pAj,Carnet *cAj)//Créer une personne et l'ajoute au carnet
    {
        creerP(pAj);
        cAj->Personne[cAj->n]=pAj;//On stocke dans Personne de Carnet le premier personnage
        cAj->n=(cAj->n)+1;//On incrémente de 1 la constante n
    }
     
    void AfficheC(Carnet *cLecture) //Affiche le carnet
    {
        char i;
     
        for(i=0;i<20;i++)
        {
        printf("%s a pour numero %s \n"((cLecture->Personne[i]).nom),((cLecture->Personne[i]).num));
        }
    }
    Salut

    D'après ce que je vois, tu stockes tout en mémoire. Ne voudrais-tu pas plutôt stocker ton carnet dans un fichier disque ???

    Citation Envoyé par Bysbobo Voir le message
    Pourquoi un char?
    Bah, c'est un nombre compris entre -128 et 127 donc pour compter de 0 à 20 ça le fait. Perso j'aurais plutôt demandé "pourquoi ne pas le mettre unsigned" mais moi ça ne me dérange pas d'utiliser un char comme tinyint...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MCD] MCD d'un projet d'annuaire telephonique
    Par rinas dans le forum Schéma
    Réponses: 7
    Dernier message: 10/12/2014, 06h10
  2. Réponses: 1
    Dernier message: 08/08/2014, 03h22
  3. Réponses: 2
    Dernier message: 21/06/2008, 11h01
  4. méthode à utiliser pour annuaire
    Par psyco2604 dans le forum ASP
    Réponses: 2
    Dernier message: 01/06/2004, 15h46

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