Taper un mot de passe avec des ****

Une petite fonction pour entrer un nombre sans l'afficher. On l'affichera à la fin pour bien montrer que le nombre a été pris.

getch

Voir version :

Pas de dépendances

Télécharger :

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

int getnombre()
{
    int c;
    int 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!=0x0D);    // jusqu'a entrée (code 0x0D)
    printf("\n");  // revient à la ligne
    return n;
}

int main()
{
    int a;
    printf("Tapez un nombre\n");
    a=getnombre();    
    printf("Nombre = %d\n",a);
    return 0;
}



Commentaires


Voici un petit programme sympa, utilisant la fonction getch de conio qui attend la prochaine frappe
de touche. contrairement a getchar qui ne valide que 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 48
le code de '1' est 49, 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")
on a 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 :)

Note : ne tapez pas des nombres de plus de 9-10 chiffres, car sinon, vous faites déborder le int, et vous aurez un nombre inattendu.


si vous etes interessé par la table ASCII:

http://www.asciitable.com/