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 :

erreur avec des fonctions.


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 7
    Points : 1
    Points
    1
    Par défaut erreur avec des fonctions.
    Bonjour à tous!

    Voila je vous explique rapidement mon petit problème:

    Pour mon travail de fin d'étude je réalise un petit programme en C, pour l'instant juste en mode console. Je suis débutante en C, il s'agit la de mon premier programme. J'ai apprit le C grâce aux cours et tutoriels C et aussi la FAQ C. Il s'agit d'un petit répertoire qui doit permettre de rajouter et de faire une recherche de contact.

    Voici pour l'instant mes pages:

    Main
    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
     
    #include <stdio.h>
    #include <stdlib.h>
     
    int main(int argc, char *argv[])
    {
      printf("*** Bonjour, Que souhaitez vous faire? ***\n\n");
      printf("*** Tapez 1 pour entrer un nouveau contact. *** \n*** Tapez 2 pour rechercher un contact deja existant. ***\n \n");
     
      long choix = 0;
      scanf("%ld", &choix);
     
      while ( choix != 1 && choix != 2)
      { 
            printf("*** Le nombre que vous avez rentre n'est pas valide. ***\n*** Veuillez faire un autre choix. ***\n\n");
            scanf("%ld", &choix);
      }
     
      if (choix == 1)
         {
                printf("*** Vous avez choisi de rentrer un nouveau contact. ***\n\n");
                entrerContact(choix);
         }
      else if (choix == 2)
         {
                printf("*** Vous avez choisi de rechercher un contact deja existant. ***\n\n");
                rechercherContact(choix);
         }
     
     
      system("PAUSE");	
      return 0;
    }

    ajouterContact.h

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    void entrerContact(char choix);
    
    void nom(char nomEntrer);

    ajouterContact.c

    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include "ajouterContact.h"
    
    void entrerContact(char choix)
    {
         
         
         char nomEntrer[50];
         printf("***Quel est le nom de la personne que vous souhaitez ajouter?*** \n\n");
         scanf("%s", nomEntrer);
         nom(nomEntrer);
          
         
    
    }
    
    void nom(long nomEntrer)
    {
        
    
    
         printf("***Vous avez inserer: %s, souhaitez vous corriger? (1 pour oui, 2 pour non.)***\n\n", nomEntrer);
         long choix = 0;
        
         scanf("%ld", &choix);
    
    while(choix != 1 && choix != 2)
         {
                printf("***Votre choix n'est pas valide, veuillez refaire un choix.\n\n***");
                scanf("ld", &choix);
         }
         
         
    if(choix == 1) 
    {
             printf("***vous avez choisi de rentrer un nouveau nom de contact.***\n\n");
             scanf("%s",nomEntrer); 
             printf("Vous avez ecrit: %s.\n \n", nomEntrer);
    }
    else if (choix == 2)
    {
         printf("***Vous avez choisi de laisser ce nom de contact la.***\n\n");  
    
    } 
    
    
    
    }
    pour l'instant ce sont les seules pages ayant du code.
    Mais lorsque je compile il me donne ces différentes erreurs dans ajouterContact.c

    ligne 13:[Warning] passing arg 1 of `nom' makes integer from pointer without a cast (ajouterContact.c)
    ligne 20 conflicting types for 'nom' (ajouterContact.c)
    ligne 5 previous declaration of 'nom' was here (ajouterContact.h)
    ligne 20 conflicting types for 'nom' (ajouterContact.c)
    ligne 5 previous declaration of 'nom' was here (ajouterContact.h)
    J ai mit en rouge les lignes en question

    merci a tous d'avoir prit le temps ne serait ce de lire.
    Bonne journée a tous !

  2. #2
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    void nom(char nomEntrer);
    void entrerContact(char choix)
    {
    ....
         char nomEntrer[50];
    ...
         nom(nomEntrer);
    ....
    void nom(long nomEntrer)
    {....
    - La déclaration de nom n'est pas conforme au prototype (type du paramètre différent : char ou long ?)
    - L'appel de nom a pour argument le nom d'un tableau de char donc cet argument est du type char * alors que la fonction nom attend un char.

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    j'ai du oublié d'en changer un merci ^^ je test de suite^^ merci beaucoup !

    Par contre, j'ai voulu rajouter le prénom de la même manière dans le programme et j'ai de nouvelles erreurs

    je vous remet le code:

    donc voici ajoutContact.c
    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include "ajouterContact.h"
    
    void entrerContact(char choix)
    {
         
         
         char nomEntrer[50];
         printf("***Quel est le nom de la personne que vous souhaitez ajouter?*** \n\n");
         scanf("%s", nomEntrer);
         nom(nomEntrer);
          
         char prenomEntrer[50];
         printf("quel est le prenom a entrer?");
         scanf("%s", prenomEntrer);  
         prenom(prenomEntrer); 
    
    
    
    }
    
    void nom(char nomEntrer)
    {
        
    
    
         printf("***Vous avez inserer: %s, souhaitez vous corriger? (1 pour oui, 2 pour non.)***\n\n", nomEntrer);
         long choix = 0;
        
         scanf("%ld", &choix);
    
    while(choix != 1 && choix != 2)
         {
                printf("***Votre choix n'est pas valide, veuillez refaire un choix.\n\n***");
                scanf("ld", &choix);
         }
         
         
    if(choix == 1) 
    {
             printf("***vous avez choisi de rentrer un nouveau nom de contact.***\n\n");
             scanf("%s",nomEntrer); // ajouter le MySQL pour integrer le nom du contact dans la BDD.
             printf("Vous avez ecrit: %s.\n \n", nomEntrer);
    }
    else if (choix == 2)
    {
         printf("***Vous avez choisi de laisser ce nom de contact la.***\n\n");  
    //Inserer le nom dans le MySQL.
    } 
    
    
    void prenom(char prenomEntrer)
    {
         printf("Vous avez entrer le prenom: %s", prenomEntrer);
         
    }
    
    
    
    }
    et ajoutContact.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    // Le header qui va gérer les fonctions qui vont permettre de rentrer un nouveau contact.
     
    void entrerContact(char choix);
     
    void nom(char nomEntrer);
     
    void prenom(char prenomEntrer);
    et maintenant les erreurs:
    ligne13 [Warning] passing arg 1 of `nom' makes integer from pointer without a cast
    ligne 18 [Warning] passing arg 1 of `prenom' makes integer from pointer without a cast
    [Linker error] undefined reference to `prenom'
    ligne 18 C ld returned 1 exit status

    Je vous aient mit en bleu les lignes d'erreur

    je suis vraiment désolée de vous embeter avec ça

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Un char n'est pas la même chose qu'un tableau de char.

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Saurais tu m'expliquer la difference? (oui oui je débute...)

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    C'est pourtant simple: Il y en a un qui contient plusieurs char.

    Et aussi, on ne peut pas transmettre directement un tableau par valeur. Un tableau en paramètre formel de fonction, c'est un pointeur déguisé vers le premier élément du tableau
    (car tout tableau est implicitement convertible en pointeur vers son premier élément. En clair, on peut faire ceci:
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int tab[10];
    int *p = tab;
    )

    En fait, ta fonction nom devrait typiquement prendre un pointeur sur char en paramètre, ainsi que la taille du tableau (puisqu'elle permet d'en modifier le contenu).
    Et ta fonction prénom, qui fait juste un affichage, peut prendre un const char * en paramètre, comme la fonction puts() qui elle aussi ne fait que de l'affichage.

  7. #7
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    D'accord je comprend un peu mieux, mais ici pour prénom je n'ai mit qu'un printf afin de vérifier s'il marche sinon comme pour le nom il demandera le prénom proposera de corriger, etc...

    il faudrait donc que je fasse des pointeurs pour chacune de mes entrées? (étant un répertoire il y en aura plusieurs ^^)

    Merci d'avoir prit le temps d'expliquer a une newbie que je suis ^^

  8. #8
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Déjà, pour l'instant tu n'as qu'un seul tableau pour le prénom. Si tu veux mémoriser plusieurs prénoms, il te faudra faire une nouvelle copie de ce tableau à chaque fois.

    Mais on n'en est pas encore là.

  9. #9
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    J'ai du mal m'exprimer désolée^^

    Je voulais dire que j'aurai plusieurs tableau a faire du fait qu'aprés le nom et le prenom je vais demander la ville, le telephone, etc...

    Donc je devrais faire comment? Avec le système de pointeurs?

  10. #10
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    Citation Envoyé par Adzho Voir le message
    J'ai du mal m'exprimer désolée^^

    Je voulais dire que j'aurai plusieurs tableau a faire du fait qu'aprés le nom et le prenom je vais demander la ville, le telephone, etc...

    Donc je devrais faire comment? Avec le système de pointeurs?
    Personnellement, pour rendre le code plus lisible, j'utiliserais une structure Contact pour représenter un contact avec des champs nom, prénom, adresse, téléphone, etc.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    struct Contact
    {
        char nom[20];
        char prenom[20];
        char adresse[64];
        char telephone[16];
    };

    Ensuite, une fois que tu as défini comment représenter un contact, il faut encore définir la structure de donnée à utiliser pour représenter une collection de contacts (un répertoire). Pour cela, il faut définir quelles opérations devra supporter cette structure de donnée:
    • L'insertion d'un nouveau contact est-elle une opération fréquente ou la plupart des contacts sont-il connu à l'initialisation? (Dans ce cas, une liste chainée est probablement plus adaptée qu'un tableau)
    • La structure de donnée doit-elle favoriser la recherche d'un contact particulier (en vue de consultation ou modification)? (Dans ce cas, un tableau trié ou un arbre binaire ou encore une table de hachage permettent une recherche en rapide)
    • Doit-on être capable de lister tous les contacts (par exemple dans l'ordre alphabétique)?


    Il te faudra encore ensuite imaginer une méthode pour enregistrer les données relatives à tes contact dans un fichier ou une base de donnée.

    Bref, la première étape de ton projet est l'analyse de ton problème afin déterminer de manière précise les fonctionnalités que tu attends de ton répertoire. Tu réponds donc à la question QUOI?, Que doit faire mon programme? Cette étape va préparer le terrain pour l'étape de conception qui suit (choix des structures de données, des algorithmes, etc.).

    Thierry

  11. #11
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Je dirais surtout avec des structures.

    Exemple:
    Code C : 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
    #include <stdlib.h>
     
    struct contact
    {
    	char prenom[80];
    	char nom[80];
    	int age;
    	char telephone[20];
    };
     
    /* Et on fait des fonctions du genre: */
    int entrer_chaine_et_redemander(char * buf, size_t taille, char const * message);
    int entrer_entier_et_redemander(int * pRet, char const * message);
    int entrer_contact(struct contact * pContact);
    void afficher_contact(struct contact const * pcContact);
     
    /* Et le main ressemblera à un truc de ce genre: */
    int main(void)
    {
    	/* Tableau de structures */
    	struct contact tabContacts[50];
    	size_t n = 0; /* compteur d'éléments dans le tableau */
    	size_t i = 0;
     
    	/* On commence par entrer maximum 50 contacts */
    	int quitte = 0;
    	while( !quitte && n<50)
    	{
    		int res = entrer_contact(&tabContacts[n]);
    		if(res < 0)
    			quitte = 1;
    	}
     
    	/* Puis pour montrer qu'on les a, on les affiche tous */
    	for(i=0 ; i<n ; i++)
    		afficher_contact(&tabContacts[i]);
     
    	return 0;
    }
    Ce code n'est évidemment pas complet, puisque les fonctions ne sont pas définies. Pose des questions sur ce que tu ne comprends pas.

    Edit: Grillé par Thierry...

  12. #12
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Merci pour votre réponse a tous les deux !

    Pour répondre tout d'abord a Thierry:

    Je vais essayer d'expliquer l'analyse que j'ai faite bien avant de commencer a coder. (oui oui elle a était faite^^ je vous le jure ^^" )

    Il s'agirait d'un répertoire fait donc en C avec comme BDD du MySQL. Lorsque l'utilisateur l'a devant lui il doit pouvoir rajouter des contacts. Pour chaque contacts il y aura ces champs possibles: Nom, prénom, Rue, Numéro de rue, ville code postal et pays, téléphone portable, téléphone fixe, téléphone professionnel, la date d'anniversaire, l'adresse mail privée, l'adresse mail professionnelle, etc... certains champs sont obligatoire ( Le nom, le prenom, le téléphone) d'autres pas l'utilisateur aura le choix de les compléter ou non.

    Comme vous avez pus le constater dans mon main, en entrant dans le programme l'utilisateur a le choix entre entrer un nouveau contact ou alors en rechercher un. Lorsqu'il en recherche un il doit pouvoir le faire a partir d'un seul champ ( par exemple juste le prénom donc toutes les personnes ayant ce prénom x doivent apparaitre...) ou alors la date de naissance, etc...

    Pour l'instant je ne veux pas faire d'éditions de suppression de contact, pour commencer j'aimerai déjà arriver a la faire de façon +/- basique.


    j'espère que j'ai était claire, si ce n'est pas le cas n'hésitez pas a me le faire savoir ^^ j'essayerais de mieux expliquer^^

    Pour ce qui est de la BDD elle est prévue, grâce a mon école je peux rentrer un professionnel qui m'a beaucoup aidé car comme le C je ne m'y connaissait pas du tout non plus.

    En tout cas merci beaucoup de ton aide et de tes explications!


    Médinoc:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    /* Et on fait des fonctions du genre: */
    int entrer_chaine_et_redemander(char * buf, size_t taille, char const * message);
    int entrer_entier_et_redemander(int * pRet, char const * message);
    int entrer_contact(struct contact * pContact);
    void afficher_contact(struct contact const * pcContact);

    j'ai beaucoup de mal a comprendre le code de cette partie donc dis moi si je me trompe s'il te plait: Pour moi tu crées différentes fonctions prenant en charge les tableau? qu'est ce exactement que la structure (struct) ? merci beaucoup a vous deux encore vous m'aidez beaucoup !

  13. #13
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Adzho,
    Ce code contient juste les prototypes de différentes fonctions qu'il te faudra sans doute écrire.
    1. La première devra demander une chaîne à l'utilisateur, et la redemander si elle ne convient pas, ou si l'utilisateur demande à la modifier, etc. J'ai écrit le prototype pour qu'on puisse l'appeler ainsi: entrer_chaine_et_redemander(pContact->nom, 80, "Entrer le nom : ");
    2. La seconde pareille, mais pour demander un int. Par exemple, on peut refuser la valeur entrée si elle est négative. On pourrait l'appeler ainsi: entrer_entier_et_redemander(&pContact->age, "Entrer l'age : ");
    3. La troisième est celle qui appellera les deux autres: On lui passe un pointeur vers UN contact du tableau, et elle le remplit avec les infos de l'utilisateur. Tu ne devrais pas avoir trop de mal à l'écrire, celle-là.
      • Note: Ces trois fonctions retournent un int, car ça permet d'indiquer s'il y a eu une erreur. Typiquement, on retourne zéro pour OK, et une valeur négative en cas d'erreur (genre -1).
    4. La dernière est pour afficher un contact. Donc, elle prend un pointeur const vers un contact (parce qu'elle ne modifie rien dedans), et elle devra faire des printf(). Facile à écrire aussi.

    Quant à la structure, c'est un ensemble de variables déclarées en un seul type.
    Donc, toute variable de ce type contient les variables déclarées dans le type.

  14. #14
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Ah d'accord! La j'ai bien compris! Merci beaucoup je vais essayer ça dés que je rentre chez moi ce soir

Discussions similaires

  1. erreur LNK2019 avec des fonctions communes.
    Par FamiDoo dans le forum Visual C++
    Réponses: 9
    Dernier message: 31/07/2006, 10h32
  2. [Mail] erreur avec utilisation fonction mail
    Par taka10 dans le forum Langage
    Réponses: 7
    Dernier message: 12/07/2006, 16h19
  3. Compilation avec des fonctions virtuel pure
    Par vanitom dans le forum C++
    Réponses: 4
    Dernier message: 16/12/2005, 14h37
  4. erreur avec la fonction putfile() sur connexion FTP
    Par stefane1981 dans le forum C++
    Réponses: 2
    Dernier message: 23/09/2005, 09h13
  5. petit souci avec des variables avec des fonctions psql
    Par dust62 dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 02/04/2005, 13h45

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