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 :

mktime renvoie toujours -1


Sujet :

C

  1. #1
    Membre du Club
    Homme Profil pro
    touristepationné
    Inscrit en
    Janvier 2012
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : touristepationné
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 132
    Points : 57
    Points
    57
    Par défaut mktime renvoie toujours -1
    Bonjour,

    je passe en argument d'une fonction une structure tm.
    En fin de fonction, je modifie la valeur contenue par des champs de cette structure grace a ->.

    Puis de retour dans le main, ou meme dans la fonction, impossible de convertir ma structure tm en valeur de type time_t.

    Pourquoi?

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    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 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par B65AcR Voir le message
    Bonjour,

    je passe en argument d'une fonction une structure tm.
    En fin de fonction, je modifie la valeur contenue par des champs de cette structure grace a ->.
    Bonjour
    Les éléments en rouge montrent une incohérence. En effet, on n'accède pas aux membres d'une structure par l'opérateur "flèche" mais par l'opérateur "point".

    Citation Envoyé par B65AcR Voir le message
    Puis de retour dans le main, ou meme dans la fonction, impossible de convertir ma structure tm en valeur de type time_t.

    Pourquoi?
    Zut, désolé, tu m'excuses car j'ai porté ma boule de cristal au nettoyage. Elle ne sera prête que lundi...
    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]

  3. #3
    Membre du Club
    Homme Profil pro
    touristepationné
    Inscrit en
    Janvier 2012
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : touristepationné
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 132
    Points : 57
    Points
    57
    Par défaut
    voici la fin du code de ma fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    // sauvegarde des donnée dans la structure tm
      tm->tm_mday = jour;
      tm->tm_mon = mois -1;// -1 car le tableau commence a zero et non a un
      tm->tm_year = annee;
     
      printf("lelelalal %lf\n", mktime(tm));
    et la déclaration:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void SaisirDate(char * date,struct tm * tm);
    Et le main:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    main()
    {
        char date[20];
        struct tm dateNaiss={0};
     
        SaisirDate(date,&dateNaiss);
     
      printf(" Le petit ordi a compris....%d %d %d\n",dateNaiss.tm_mday,dateNaiss.tm_mon,dateNaiss.tm_year);
     
    }
    Merci pour ta réponse rapide, je ne m'y attendais pas!

    année prend une valeur a 3 chiffres, du genre 998 pour 1998

  4. #4
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    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 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par B65AcR Voir le message
    Citation Envoyé par B65AcR Voir le message
    je passe en argument d'une fonction une structure tm.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    main()
    {
        char date[20];
        struct tm dateNaiss={0};
     
        SaisirDate(date,&dateNaiss);
        
      printf(" Le petit ordi a compris....%d %d %d\n",dateNaiss.tm_mday,dateNaiss.tm_mon,dateNaiss.tm_year);
    
    }
    Donc déjà, tu n'as pas décrit la situation avec exactitude car tu passes une adresse et non une structure...

    Citation Envoyé par B65AcR Voir le message
    voici la fin du code de ma fonction
    Moui, c'est vrai qu'avec la fonction en entier ce serait trop trop trop facile. T'as raison, c'est le challenge qui prime...

    Citation Envoyé par B65AcR Voir le message
    année prend une valeur a 3 chiffres, du genre 998 pour 1998
    C'est vrai que c'est super courant. Et pratique aussi. 492 découverte de l'amérique, 789 prise de la Bastille et abolition des privilèges, 800 sacre de Charlemagne qui devient ainsi empereur de l'occident et des états-unis et qui rétablit les privilèges. Un petit condensé d'histoire en somme...
    Mis à part ça, connais-tu la façon qu'à Unix de coder ses dates ? Il les code en secondes sur un long signé. Toutefois, un long signé ne peut coder que 2147483648 valeurs. Converties en temps standard en divisant par 86400 puis par 365.25 cela donne une plage de 68 années. C'est à dire que tu ne peux récupérer le mktime que pour une date allant de 1970 jusqu'à 2038. Donc trop limite pour récupérer en timestamp les dates de Charlemagne ou de Trafalgar.
    Donc peut-être que si tu rentres 013 (pour 2013) il conviendrait alors d'ajouter 2000 au champ tm_year...

    Autre chose: quand une fonction système échoue, t'as errno qui te dit pourquoi et strerror(errno) qui te l'affiche...
    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]

  5. #5
    Membre du Club
    Homme Profil pro
    touristepationné
    Inscrit en
    Janvier 2012
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : touristepationné
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 132
    Points : 57
    Points
    57
    Par défaut
    ok merci pour strerror je ne conaissais pas.

    Voici toute ma fonction
    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
    92
    93
    94
    95
     
    void SaisirDate(char * date,struct tm * tm)
    {
      int jour, mois, annee, lg, i;
      char conf=' ';
     
      do{
        // saisi de la date
        //do de verif des valeurs rentrées par l'utilisateur
        do{
          // do qui permet de verifier que l'utilisateur rentre assez de caracteres et se sert de separateurs
          do{
          printf("saisir date au format jj/mm/aaa ou jj/mm/aaaa\n");
          gets(date);
          lg=strlen(date);
          }
          while(lg<7);
          //Remplacement des separateur par * pour eviter que la fonction sscanf plante
          for (i=0;i<lg;i++)
          {
          if(isdigit(date[i])==0)date[i]='*';
          }
          //lecture de la chaine et extraction de la date
          sscanf(date,"%d*%d*%d", &jour, &mois, &annee);
        }
        while(jour>31 || mois>12 || annee<100);
     
        // condition qui récupere que les 3 derniers chiffres de l'année entrée
        if (annee>999)
        {
          while (annee-1000>=0){annee=annee-1000;}
        }
     
      // attention aux mois avec seulement 30 jours
      if ((mois==4 && jour>30) || (mois==6 && jour>30) || (mois==9 && jour>30) || (mois==11 && jour>30)){
        do{
          printf ("Ce mois ne comporte que 30 jours.\nRessaisissez le jour:\n");
          scanf("%d",&jour);
          getchar();
        }
        while (jour>30 || jour<1);
      }
     
      if (mois == 2 && jour>28){
      // si le année est divisible par 4 elle est bissectille sauf si une année multiple de 100 n'est pas multiple de 400
       if(annee%4==0){
          if (annee%100==0 && annee%400!=0){
    	do{
    	  printf ("Ce mois comporte 28 jours.\nRessaisissez le jour:\n");
    	  scanf("%d",&jour);
    	  getchar();
    	  }
          while (jour>28 || jour<1); 
          }
          else if (jour>29) {
    	  do{
    	    printf ("Ce mois comporte 29 jours.\nRessaisissez le jour:\n");
    	    scanf("%d",&jour);
    	    getchar();
    	    }
        while (jour>29 || jour<1); 
    	    }
      }
     
      else  {
        do{
        printf ("Ce mois ne comporte que 28 jours.\nRessaisissez le jour:\n");
        scanf("%d",&jour);
        getchar();
       }
       while (jour>28 || jour<1); 
      }
     }// fin if (mois==2) 
     printf("vous avez saisi: %d %d %d\n",jour,mois,annee);
     printf("Confirmez vous? o ou y pour oui\n");
     conf=getchar();
     (char)conf;
     conf=toupper(conf);
     getchar();
     
      }// fin du do de confirmation de la saisie
        while (conf!='O' && conf!= 'Y');
     
      // initialisation a zero de la structure tm
      memset(tm,0,sizeof(tm)); 
     
      // sauvegarde des donnée dans la structure tm
      tm->tm_mday = jour;
      tm->tm_mon = mois -1;// -1 car le tableau commence a zero et non a un
      tm->tm_year= annee;
     
      if (mktime(tm)==-1){printf("%s\n",strerror(errno));}
     
      printf("lelelalal %lf\n", mktime(tm));
    }
    reponse de errno... succes...

    Encore raté.

  6. #6
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    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 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Bon, déjà la variable date[20] du main que tu passes à ta fonction ne sert à rien. Autant mettre cette variable directement dans la fonction.
    Ensuite ta gestion de l'erreur est super trop compliquée. Si le gars rentre 31/11 il doit resaisir le jour. Et s'il s'était trompé et qu'il voulait saisir 31/10 ???
    Une date c'est "un tout". Soit la date est correcte "en entier", soit elle ne l'est pas et on re saisit tout. Dans ce genre de cas, mieux vaut dédier la vérification à une fonction spécialisée qui renverra une valeur si la date est ok et une (ou plusieurs autres) si la date ne l'est pas.

    Exemple
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    int verifieDate(unsigned short jj, unsigned short mm, unsigned short aa)
    {
    	if (jj > 31) return -1;
    	if (mm > 12) return -2;
    	if (jj == 31 && (mm == 2 || mm == 4 | mm == 6 || mm == 9 || mm == 11))
    		return -3;
    	if (jj == 30 && mm == 2)
    		return -4;
    	if (jj == 29 && mm == 2 && ((aa%4) != 0 || ((aa%100) == 0 && (aa%400) != 0)))
    		return -5;
    	return 0;
    }

    Et la façon de s'en servir

    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    void saisirDate(struct tm *tm)
    {
    	char date[20];
    	while (1)
    	{
    		// Saisie date (scanf, etc)
    		if (verifieDate(jj, mm, aa) == 0) break;
    		printf("Date incorrecte - Recommencez\n");
    	}
     
    	... (suite et fin)...
    }
    Cela allègera ton code bien rempli de doublons - Ensuite donc tu fais gaffe avec cette histoire de date à 3 chiffres à laquelle j'ai rien pigé (mais il est tard aussi). Accessoirement tu peux aussi essayer mktime() avec des valeurs posées "en dur" pour tester. Pour moi, la suite c'est demain...

    Citation Envoyé par B65AcR Voir le message
    printf("lelelalal %lf\n", mktime(tm));
    Euh, pourquoi %lf pour une valeur de type int ???
    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]

  7. #7
    Membre du Club
    Homme Profil pro
    touristepationné
    Inscrit en
    Janvier 2012
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : touristepationné
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 132
    Points : 57
    Points
    57
    Par défaut
    Merci pour ton code, te manière de faire me plait bien!

    Pour les valeur en dur, j'ai tout essayé, rien ni fait... Est-ce que le mktime() essayerai de travailler sur une variable locale, alors que j'ai enregistré mes valeurs dans une variable à l'exterieur de la fonction grâce à "->" ???

  8. #8
    Membre du Club
    Homme Profil pro
    touristepationné
    Inscrit en
    Janvier 2012
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : touristepationné
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 132
    Points : 57
    Points
    57
    Par défaut
    [QUOTE=B65AcR;7655076]Merci pour ton code, te manière de faire me plait bien!

    Pour les valeur en dur, j'ai tout essayé, rien ni fait...


    Et mktime qui persiste à renvoyer -1... C'est vraiment un gros problème!

    edit:

    Je crois que ça marche!
    Voici le 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
    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
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
     
    #include <stdio.h>
    #include <string.h>
    #include <ctype.h>
    #include <time.h>
    #include <errno.h>
     
    #include "eleve.h"
     
    typedef struct classe
    {
        char nom[30];
        char enseignant[30];
        int nbEleve;
        eleve_t *eleves;
        struct classe *suivant;
    }classe_t;
     
    typedef struct ecole
    {
        char nom[30];
        char directeur[30];
        int annee;
        int nbClasse;
        classe_t *classes;
    }ecole_t;
     
    int verifieDate(unsigned short jj, unsigned short mm, unsigned short aa)
    {
    	if (jj > 31) return -1;
    	if (mm > 12) return -2;
    	if (jj == 31 && (mm == 2 || mm == 4 | mm == 6 || mm == 9 || mm == 11))
    		return -3;
    	if (jj == 30 && mm == 2)
    		return -4;
    	if (jj == 29 && mm == 2 && ((aa%4) != 0 || ((aa%100) == 0 && (aa%400) != 0)))
    		return -5;
    	return 0;
    }
     
     
    void SaisirDate(char * date,struct tm * tm)
    {
      int jour, mois, annee, lg, i;
      char conf=' ';
     
      do{
        // saisi de la date
        //do de verif des valeurs rentrées par l'utilisateur
        do{
          // do qui permet de verifier que l'utilisateur rentre assez de caracteres et se sert de separateurs
          do{
          printf("saisir date au format jj/mm/aaa ou jj/mm/aaaa\n");
          gets(date);
          lg=strlen(date);
          }
          while(lg<7);
          //Remplacement des separateur par * pour eviter que la fonction sscanf plante
          for (i=0;i<lg;i++)
          {
          if(isdigit(date[i])==0)date[i]='*';
          }
          //lecture de la chaine et extraction de la date
          sscanf(date,"%d*%d*%d", &jour, &mois, &annee);
          // Vérif de la date saisie
          if (verifieDate(jour, mois, annee) == 0) break;
          printf("Date incorrecte - Recommencez\n");
        }
        while((jour>31 || mois>12 || annee<100)||(verifieDate(jour, mois, annee) < 0));
     
     printf("vous avez saisi: %d %d %d\n",jour,mois,annee);
     printf("Confirmez vous? o ou y pour oui\n");
     conf=getchar();
     (char)conf;
     conf=toupper(conf);
     getchar();
     
      }// fin du do de confirmation de la saisie
        while (conf!='O' && conf!= 'Y');
     
      // initialisation a zero de la structure tm
      memset(tm,0,sizeof(tm)); 
     
      // sauvegarde des donnée dans la structure tm
      tm->tm_mday = jour;
      tm->tm_mon = mois -1;// -1 car le tableau commence a zero et non a un
      tm->tm_year= annee-1900;
     
      if (mktime(tm)==-1){printf("%s\n",strerror(errno));}
     
      printf("\tmk time renvoit... %d\n", mktime(tm));
    }
     
     
    main()
    {
        char date[20];
        struct tm dateNaiss={0};
     
        SaisirDate(date,&dateNaiss);
     
      printf(" Le petit ordi a compris....%d %d %d\n",dateNaiss.tm_mday,dateNaiss.tm_mon,dateNaiss.tm_year);
     
    }
    J'ai remplacé %lf par %d. Mais pourquoi? une variable time_t, c'est un unsigned long non?

  9. #9
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    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 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par B65AcR Voir le message
    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
    void SaisirDate(char * date   /* Paramètre inutile */,struct tm * tm)
    {
      int jour, mois, annee, lg, i;
      char conf=' ';
      
      do{
        // saisi de la date
        //do de verif des valeurs rentrées par l'utilisateur
        do{
          // do qui permet de verifier que l'utilisateur rentre assez de caracteres et se sert de separateurs
          do{
          printf("saisir date au format jj/mm/aaa ou jj/mm/aaaa\n");
          gets(date);
          lg=strlen(date);
          }
          while(lg<7);
          //Remplacement des separateur par * pour eviter que la fonction sscanf plante
          for (i=0;i<lg;i++)
          {
          if(isdigit(date[i])==0)date[i]='*';
          }
          //lecture de la chaine et extraction de la date
          sscanf(date,"%d*%d*%d", &jour, &mois, &annee);
          // Vérif de la date saisie
          if (verifieDate(jour, mois, annee) == 0) break;
          printf("Date incorrecte - Recommencez\n");
        }
        while((jour>31 || mois>12 || annee<100)||(verifieDate(jour, mois, annee) < 0));   // Inutile - Si la date est correcte alors sortie de boucle donc ici une boucle infinie suffit
      
     printf("vous avez saisi: %d %d %d\n",jour,mois,annee);
     printf("Confirmez vous? o ou y pour oui\n");
     conf=getchar();
     (char)conf;            // ???    conf=toupper(getchar()) !!!
     conf=toupper(conf);
     getchar();
        
      }// fin du do de confirmation de la saisie
        while (conf!='O' && conf!= 'Y');
        
      // initialisation a zero de la structure tm
      memset(tm,0,sizeof(tm)); 
      
      // sauvegarde des donnée dans la structure tm
      tm->tm_mday = jour;
      tm->tm_mon = mois -1;// -1 car le tableau commence a zero et non a un
      tm->tm_year= annee-1900;
      
      if (mktime(tm)==-1){printf("%s\n",strerror(errno));}
      
      printf("\tmk time renvoit... %d\n", mktime(tm));
    }
    Mouais. Je t'ai remis quelques remarques dans ton code...

    Citation Envoyé par B65AcR Voir le message
    J'ai remplacé %lf par %d. Mais pourquoi? une variable time_t, c'est un unsigned long non?
    Ben oui, unsigned long, pas long float !!!
    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]

Discussions similaires

  1. fopen renvoi toujours NULL
    Par kissmytoe dans le forum C
    Réponses: 6
    Dernier message: 01/11/2006, 20h01
  2. socket send renvoi toujours (-1)
    Par tkwebch dans le forum Réseau
    Réponses: 8
    Dernier message: 30/08/2006, 17h24
  3. isdigit() renvoie toujours 0
    Par gangsoleil dans le forum C
    Réponses: 30
    Dernier message: 07/08/2006, 13h42
  4. [MySQL] Mon SELECT COUNT me renvoie toujours 1
    Par diaboloche dans le forum PHP & Base de données
    Réponses: 14
    Dernier message: 11/07/2006, 11h53
  5. Réponses: 2
    Dernier message: 16/04/2005, 20h24

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