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

Bibliothèque standard C Discussion :

Comportement de getc(), scanf(), etc.


Sujet :

Bibliothèque standard C

  1. #1
    Membre du Club Avatar de Array
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    210
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 210
    Points : 55
    Points
    55
    Par défaut Comportement de getc(), scanf(), etc.
    Bonjour,

    J'aimerais savoir comment font des fonctions comme scanf() et getc() pour suspendre l'exécution du programme et permetre à l'utuilisateur d'entrer du texte?

    Je demande cela parce que j'ai un programme qui affiche ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    [...]
     
    Quel mode souhaitez-vous utiliser? [0/1]
        1 = Par un fichier.
        2 = Par le clavier.
     
    [ ]
    La dernière ligne, où il y a des crochets, j'utilise l'instruction printf comme ceci :

    suivi d'un appel à scanf().

    Ainsi, lorsque l'utilisateur vient pour entrer 0 ou 1, le chiffre qu'il a entré est entre les crochets.

    Cependant, s'il entre plus qu'un caractère, le deuxième crochet s'efface (et cela est évidemment normal) et est remplacé par le deuxième caractère que l'utilisateur a entré.

    Je désirerais savoir comment est-il possible de faire en sorte que l'utilisateur puisse entrer UN SEUL caractère, et que, s'il en entre plusieurs, le caractère précédent qu'il a écrit est remplacé par le suivant, toujours à la même position, de façon à ne pas effacer le deuxième crochet.

    Merci,

    Respects,

    Array

  2. #2
    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
    Pour cela, des fonctions telles que fgetc() ou scanf() ne sont pas adaptées. Il n'existe rien en C standard qui te permette de faire ce que tu veux. Pour faire des interfaces utilisateur évoluées en mode texte, je recommande d'utiliser la bibliothèque PDCurses.

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  3. #3
    Membre du Club Avatar de Array
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    210
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 210
    Points : 55
    Points
    55
    Par défaut
    Pour cela, des fonctions telles que fgetc() ou scanf() ne sont pas adaptées. Il n'existe rien en C standard qui te permette de faire ce que tu veux. Pour faire des interfaces utilisateur évoluées en mode texte, je recommande d'utiliser la bibliothèque PDCurses.
    Par curiosité, s'il n'y a aucune fonction standard pour le faire, serait-il possible de le faire en pur C (je parle sans recourir à aucune bibliothèque non standard)?

    Parce que certaines personnes disent que le C est un langage d'assemblage portatif. Or, on peut faire le genre de truc que je veux en ASM...

    PS: Si non, vaut-il mieux utiliser ncurses que PDCurses sur les systèmes unix?

    Merci,

    Sincèrement,

    Array

  4. #4
    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
    Sous unixoide, j'utilise ncurses. PDCurses est relativement compatible avec ncurses (mais pas 100% je crois) et a l'avantage de pouvoir être utilisée sous système unixoide (X11), sous Windows, etc.

    Il n'y a malheureusement aucune solution 100 % portable pour ton problème. L'utilisation de PDCurses ou ncurses me semble la plus adaptée. Toutefois, je ne pense pas que pour ton menu, PDCurses/ncurses soit absolument indispensable. Pourquoi veux-tu que le choix de l'utilisateur s'inscrive absolument dans une case? Pure cosmétique? Personnellement, pour implanter un menu de la sorte, j'essaie de faire au plus simple avec une solution à base de fgets() et des fonctions de conversions qui vont bien.

    Bien sûr, tout dépend des contraintes liées à ton application. Mais si ton but est d'apprendre à programmer, sache que la solution la plus simple est très souvent la meilleure.

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  5. #5
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Citation Envoyé par Array
    Par curiosité, s'il n'y a aucune fonction standard pour le faire, serait-il possible de le faire en pur C (je parle sans recourir à aucune bibliothèque non standard) ?

    Parce que certaines personnes disent que le C est un langage d'assemblage portatif. Or, on peut faire le genre de truc que je veux en ASM...
    Il n'y a rien que tu ne puisse faire en C étant donné qu'il s'agit justement d'un langage très proche de la machine. Tu peux recoder toute la bibliothèque standard (ou n'importe quelle autre) en partant de zéro si tu veux. Mais du moment que tu utilises une spécificité d'un système particulier, tu sors du cadre de la portabilité. Or de nombreuses opérations (comme les entrées/sorties par exemple) sont dépendantes du système. Pour faire des entrées/sorties en langage C, il faut à priori passer par les fonctinnalités de bas niveau de son système. La librairie standard fournit une interface portable de routines écrites en langage C mais dont l'implémentation peut évidemment dépendre du système. En mode réel 16 bits (x86) par exemple tu peux les interruptions du DOS (si t'es sous DOS) ou du BIOS (indépendant de l'OS), mais évidement ta fonction ne marchera que sur PC. Tout ce que t'as à faire donc c'est de coder une série d'intructions machines qui fait ce que tu souhaites et de pointer ces instructions à l'aide d'un pointeur de fonction, puis appeler cette fonction. Ca fait entrer en jeu pas mal de connaissances, je suppose que sais écrire des instructions en langage machine et que tu connais la convention d'appel du C.

  6. #6
    Membre du Club Avatar de Array
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    210
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 210
    Points : 55
    Points
    55
    Par défaut
    Il n'y a rien que tu ne puisse faire en C étant donné qu'il s'agit justement d'un langage très proche de la machine. Tu peux recoder toute la bibliothèque standard (ou n'importe quelle autre) en partant de zéro si tu veux. Mais du moment que tu utilises une spécificité d'un système particulier, tu sors du cadre de la portabilité. Or de nombreuses opérations (comme les entrées/sorties par exemple) sont dépendantes du système. Pour faire des entrées/sorties en langage C, il faut à priori passer par les fonctinnalités de bas niveau de son système. La librairie standard fournit une interface portable de routines écrites en langage C mais dont l'implémentation peut évidemment dépendre du système. En mode réel 16 bits (x86) par exemple tu peux les interruptions du DOS (si t'es sous DOS) ou du BIOS (indépendant de l'OS), mais évidement ta fonction ne marchera que sur PC. Tout ce que t'as à faire donc c'est de coder une série d'intructions machines qui fait ce que tu souhaites et de pointer ces instructions à l'aide d'un pointeur de fonction, puis appeler cette fonction. Ca fait entrer en jeu pas mal de connaissances, je suppose que sais écrire des instructions en langage machine et que tu connais la convention d'appel du C.
    Il n'y a malheureusement aucune solution 100 % portable pour ton problème.

    C'est à des réponses similaires à celles-ci dont j'avais peur...
    Nah, coder en ASM pour moi est, pour l'instant, un grand mystère.
    Je comprends ce que vous dites.
    La seule solution est de manipuler les instructions spécifiques à une implémentation afin parvenir à mes fins, ce qui nécessiterait que je me renseigne sur toutes les implémentations, savoir les spécifités de celles-ci, etc.
    0 pour la portabilité, 100 pour la difficulté.
    C'est donc ainsi que GLIBC et MSVCRT sont conçues, en regroupant toutes les spécifités...

    Je me rabbaterai donc sur PDCurses.



    Pourquoi veux-tu que le choix de l'utilisateur s'inscrive absolument dans une case? Pure cosmétique?
    C'est que mon menu va s'agrandir énormément.
    Je crois que cela voudrais la peine.



    Mais si ton but est d'apprendre à programmer, sache que la solution la plus simple est très souvent la meilleure.
    Oui, je le sais, mais j'ai toujours eu tendance au perfectionnisme. Cependant, je n'exagère pas. De plus, cela me permet de m'améliorer, puisque je touche à plus de choses :]. Toutefois, j'admet que cela pourrait me jouer de mauvais tours, je vais donc tâcher d'agir avec modération.

  7. #7
    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 Array Voir le message
    Oui, je le sais, mais j'ai toujours eu tendance au perfectionnisme. Cependant, je n'exagère pas. De plus, cela me permet de m'améliorer, puisque je touche à plus de choses :]. Toutefois, j'admet que cela pourrait me jouer de mauvais tours, je vais donc tâcher d'agir avec modération.
    Dans ce cas, PDCurses est probablement ce qu'il te faut! Voici un excellent didacticiel au sujet de ncurses: http://tldp.org/HOWTO/NCURSES-Programming-HOWTO/. J'ai pas testé tous les exemples, mais ceux que j'ai étudié fonctionnent indifféramment avec ncurses et avec PDCurses (ATTENTION: si tu utilises PDCurses, il te faut remplacer l'inclusion de ncurses.h par curses.h). N'hésite pas à me faire part des incompatibilités entre ncurses et PDCurses que tu pourrais observer avec ce tuto.

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  8. #8
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Citation Envoyé par Array
    La seule solution est de manipuler les instructions spécifiques à une implémentation afin parvenir à mes fins, ce qui nécessiterait que je me renseigne sur toutes les implémentations, savoir les spécifités de celles-ci, etc.
    Pour être totalement portable le C n'intègre quoi que ce soit qui soit spécifique à une plateforme particulière, tout en restant très proche de la machine. A priori c'est au programmeur de développer ses propres outils.

    Citation Envoyé par Array
    C'est donc ainsi que GLIBC et MSVCRT sont conçues, en regroupant toutes les spécifités...
    Tu veux parler de la bibliothèque standard? Oui, et pareil pour toutes les autres libs. Le code de la fontion fopen de la lib C pour DOS par exemple n'est pas le même que celui pour celle de la lib pour Windows, Linux, etc. puisqu'il s'agit d'une fonction d'E/S qui est une opération dépendante du système. Par contre les fonctions telles que memcpy, strlen, etc. sont "totalement" portables.

  9. #9
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Array Voir le message
    Par curiosité, s'il n'y a aucune fonction standard pour le faire, serait-il possible de le faire en pur C (je parle sans recourir à aucune bibliothèque non standard)?
    Non. Le comportement de fgetc() (à la base des autres fonctions d'entrée standards) est suspensif et il attend un '\n' dans le flux. C'est la règle.

    http://emmanuel-delahaye.developpez.com/notes.htm#fgetc

    Parce que certaines personnes disent que le C est un langage d'assemblage portatif.
    Ce qui est portatif, c'est Windows et ses poignée (handles)... Le C est 'portable'.
    Or, on peut faire le genre de truc que je veux en ASM...
    Ah oui, ? Comment, ça m'intéresse. Et surtout sur quelle plateforme ?
    PS: Si non, vaut-il mieux utiliser ncurses que PDCurses sur les systèmes unix?
    Pour faire des choses simples, l'un ou l'autre suffisent. Ce qui est bien avec PDCurses, c'est qu'on ne sait faire que ce qui est portable...
    Pas de Wi-Fi à la maison : CPL

  10. #10
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Array Voir le message
    C'est donc ainsi que GLIBC et MSVCRT sont conçues, en regroupant toutes les spécifités...
    glibc n'a rien à voir. C'est une bibliothèque d'extension pour gcc. Tu parles sans doute de libc, qui est le nom de la bibliothèque standard du C sous Unixoïde (et qui, en cela est tout à fait comparable à MSVCRT de Windows) .
    Pas de Wi-Fi à la maison : CPL

  11. #11
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Melem Voir le message
    Par contre les fonctions telles que memcpy, strlen, etc. sont "totalement" portables.
    Euh, non. Enfin, si, mais pas de façon optimisée... memcpy() notamment peut faire l'objet de recopie en 16 ou en 32 bits qui sont bien plus rapides qu'en mode 8-bit (char sur un x86). En x86, on peut aussi utiliser les instructions asm de copie de chaine optimisées qui font des copie de blocs en une instruction... (repxxx)
    Pas de Wi-Fi à la maison : CPL

  12. #12
    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
    PDCurses peut être utilisé sous Windows. Pas ncurses.

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  13. #13
    Membre à l'essai
    Inscrit en
    Décembre 2007
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 14
    Points : 13
    Points
    13
    Par défaut
    J'ai peut être trouvé une solution à ton problème Array, tu peux la développer selon tes besoins :

    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
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <conio.h>
     
    int main (void)
    {
      char choix = '0', c ;
     
      while(1)
      {
         system ("cls");
         printf ("Votre choix : [%c]\n", choix);
         c = getch ();
         choix = c;
       }
     
      return 0;
    }

  14. #14
    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 [ANBU]Ralph Voir le message
    J'ai peut être trouvé une solution à ton problème Array, tu peux la développer selon tes besoins :

    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
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <conio.h>
     
    int main (void)
    {
      char choix = '0', c ;
     
      while(1)
      {
         system ("cls");
         printf ("Votre choix : [%c]\n", choix);
         c = getch ();
         choix = c;
       }
     
      return 0;
    }
    Cette solution n'est pas portable. Or il me semble que le PO a mentionné à plusieurs reprises les systèmes UNIX.

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  15. #15
    Membre à l'essai
    Inscrit en
    Décembre 2007
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 14
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par Thierry Chappuis Voir le message
    Cette solution n'est pas portable
    Bien sûr, mais il devrait exister dans PDcurses ou ncurses une fonction equivalente à getch(), ai-je tort?

    ps : je n'ai jamais travaillé ni avec pdcurses ni avec ncurses.

  16. #16
    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 [ANBU]Ralph Voir le message
    Bien sûr, mais il devrait exister dans PDcurses ou ncurses une fonction equivalente à getch(), ai-je tort?

    ps : je n'ai jamais travaillé ni avec pdcurses ni avec ncurses.
    getch() existe avec PDCurses.

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  17. #17
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Thierry Chappuis Voir le message
    getch() existe avec PDCurses.
    Mais rien ne dit qu'elle ait le même comportement que le getch() de CONIO.
    Pas de Wi-Fi à la maison : CPL

  18. #18
    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 Emmanuel Delahaye Voir le message
    Mais rien ne dit qu'elle ait le même comportement que le getch() de CONIO.
    +1
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

Discussions similaires

  1. Réponses: 3
    Dernier message: 09/10/2014, 18h46
  2. Réponses: 6
    Dernier message: 14/04/2014, 14h17
  3. Comportement de scanf sous Eclipse
    Par razily dans le forum Eclipse C & C++
    Réponses: 3
    Dernier message: 22/10/2009, 16h20
  4. Browser qui se comporte comme mozilla ou comme ie, etc.
    Par Bad_Lemon dans le forum Réseau
    Réponses: 5
    Dernier message: 25/04/2007, 07h54
  5. Documentation gratuite sur l'API Windows, COM, DCOM, OLE, etc.
    Par Community Management dans le forum Windows
    Réponses: 1
    Dernier message: 16/11/2006, 15h28

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