Partage
  • Partager sur Facebook
  • Partager sur Twitter

Cacher nombres entrés avec clavier

cacher ce qu'entre quelqu'un (étoiles par ex.)sous console ?

    9 janvier 2006 à 15:35:14

    Voila mon problème : J'aimerais avoir une fonction (toute prête ou indices pour la faire) pour pouvoir cacher les entrées clavier d'une personnes par des étoiles sous console...

    Par exemple en mettant un scanf("%ld", &mysteryNumber), il se trouve qu'on obtient sous console un message du type
    Joueur 1, entrez le nombre mystère_86(par exemple)
    joueur 2 quel est le nombre mystère ?

    Avouez que c'est bête... il faudrait cacher ceci par des étoiles par exmple comme pour les mots de passe ... Comment faire ? avec un getchar ? si oui pourriez vous mettre la fonction détaillée ?

    Merci d'avance
    • Partager sur Facebook
    • Partager sur Twitter
      9 janvier 2006 à 15:42:00

      Y'a un tuto sur ça ici en c++, mais y'a pas de grande différence pour le c suffit juste de remplacer quelques trucs (cout = printf) etc

      ++
      • Partager sur Facebook
      • Partager sur Twitter
        9 janvier 2006 à 16:34:23

        Disons que je ne connais strictement rien au C++ alors le "etc" m'est inconnu...
        De plus même en laissant (après tout il devrait le connaitre étant donné que j'utilise devC++) le C++, il dit ne pas connaitre la directive de préprocesseur #include <iostream>... et donc tout le reste des fonctions de C++.

        N'y aurait il pas moyen plutot de, par exemple , taper un nombre ( qui selon la difficulté peut aller de 1 à 100, 1000, ou 10000) au clavier qui définit directement nombreMystere, sans l'afficher ?
        • Partager sur Facebook
        • Partager sur Twitter
          9 janvier 2006 à 16:51:58

          Je l'ai "traduit" en C :

          #include <stdio.h>
          #include <stdlib.h>
          #include <conio.h>

          long getnombre()
          {
                  long c = 0;
                  long n = 0;

                  do
                  {
                          c = getch();    // attends la prochaine touche
                          if (c >= '0' && c <= '9')  // si c'est un chiffre uniquement
                          {
                                  n *= 10;
                                  n += (c-'0');      // mise a jour de n
                                  printf("*");
                          }
                  }

                  while (c != 13);        // jusqu'a entrée (code 13)

                  printf("\n");   // revient a la ligne
                  return n;
          }

          int main()
          {
                  int a;
                  a = getnombre();
                  printf("nombre = %ld", a );
                  system("PAUSE");
                  return 0;
          }

          /* Commentaire :

          Voici un petit programme sympa, utilisant la fonction getch de conio qui attend la prochaine frappe
          de touche. contrairement a getchar qui passe quand on lui envoie entrée, getch() passe quand on lui
          envoie n'importe quelle touche, il récupere alors le code (ASCII) de la touche.


          Les difficultés viennent de la manipulation de ces caracteres :
          en effet, je récuperes mon caractere dans c

          Cependant, c est un code ASCII, si je tape sur 0, la code de '0' est 49
          le code de '1' est 50, etc !! et le reste se suit...
          Mais a la rigueur, les valeurs des codes, on s'en fiche :

            le code de zéro se récupere avec '0'
            le code de la lettre w se récupere avec 'w'
            etc !!

            donc en toute logique, pour savoir si le code tapé est un chiffre il est entre '0' et '9'
            (lire : "code de 0" et "code de 9&quot;)
            d'ou la ligne :

            if (c>='0' && c<='9')

            Puis ensuite, il faut savoir que les codes se suivent : le code de 0 est juste avant celui de 1
            qui est juste avant celui de 2, etc !!

            donc pour obtenir le nombre voulu : une astuce :   c-'0'  (le code, moins le code de zéro donne le bon nombre)

           Le reste du programme doit se comprendre :)

            Le cout.flush() force l'ordi, apres un cout, a afficher son texte.
            ça peut paraitre étrange, mais certains compilateurs, lorsque l'on fait un cout, attend le endl
            pour afficher le cout...
            Du genre, sans ce cout.flush(), je tapais mes chiffres, et les étoiles apparaissaient toutes en
            meme temps lorsque j'appuyais sur entrée : contré par cout.flush() qui voudrais dire :
            "met a jour le cout" :)

          si vous etes interessé par la table ASCII:

            http://www.asciitable.com/

          */

          • Partager sur Facebook
          • Partager sur Twitter
            9 janvier 2006 à 17:00:55

            Merci beaucoup ca marche à merveille !!!
            Ya juste à enlever le printf("%ld", a); parceque sinon retour à la case départ ;-) merci encore !
            • Partager sur Facebook
            • Partager sur Twitter

            Cacher nombres entrés avec clavier

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown