lundi 22 février 2016

Connaitre le code ASCII d'une touche en C

Dans cet article, je vais vous montrer comment connaitre le code ASCII d'une touche appuyer par l'utilisateur comme  les touche entré, backspace,...
Pour cela nous allons utiliser une fonction de saisie de caractère de façon invisible dans la console qui est définie dans la bibliothèque conio.h.
illustration du  code :
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int main()
{
    char car;
    printf("appuyer sur une touche pour avoir son code ASCII\n");
    car=getch();
    printf("Le code ASCII est : %d",car);
    system("PAUSE"  );
    return 0;
}


samedi 20 février 2016

Faire un LOGIN en Langage C [Basic]



Parfois, il devient nécessaire de simuler une fenêtre de connexion en mode console.
Dans ce tutoriel, je vais vous montrer comment faire un login en C. Pour cela, nous travaillerons en mémoire (donc pas de fichier ni de base de données).
Pour commencer, on définit deux (2) constantes de chaine de caractère contenant le nom le nom d’utilisateur et le mot de passe et deux autres qui stockerons respectivement le code ASCII des touches entrer et Backspace (effacement). On suppose que le nom d’utilisateur « username » et que le mot de passe est « password ».


#define NAME "username"
#define PASS "password"
#define ENTER 13
#define BACKSPACE 8

Commençons par demander à l’utilisateur de fournir son nom d’utilisateur en partant du principe qu’il continuera à saisir tant qu’il ne fournit pas le nom d’utilisateur correct (dans notre cas c’est « username »).


char nom_user [20] ;
    do
    {
        system ("CLS");
        printf ("Nom  d'utilisateur : ");
        scanf("%s", nom_user);
        if(strcmp(nom_user,NAME)!=0)
        {
            Printf ("Nom d'utilisateur invalide !");
            getch ();
        }


    }while (strcmp(nom_user,NAME)!=0);


Maintenant on il nous reste plus que le mot de passe. Dans la saisie du mot de passe, on ne doit pas afficher les caractères saisis par l’utilisateur. A leur place, on  affiche le caractère « * ». Pour effectuer cela, on  saisira caractère par caractère. Faites les déclarations suivantes

char c ; //Stocke le caractère courant
char mot_pass [20] ; //Mot de passe final saisie
char chaine [20]; //chaine utilisé pour faire la saisie initial du mot de passe
int nb ; //compte le nombre de caractère que contient le mot de passe


int i ; //pour parcourir les caractères saisis
On permet la saisie du mot de passe
do
    {
        printf("Mot de passe : ");
        nb=0;
//L’utilisateur saisie tant qu’il ne tape pas sur la touche entrer
        while ((c=getch())!=ENTER)
        {
            if(c!=BACKSPACE && nb<20)
            {
                chaine [nb]=c;
                nb++;
                printf("*");
            }
            else
            {
                if(nb>0)
                {
                    //Pour gérer l'effacement
                    nb--;
                   chaine[nb]='\0';
                }
            }
        }
        //On copie tous les caractères contenu dans la chaine
        for(i=0;i<nb; i++)
        {
            mot_pass[i]=chaine[i];
        }
        mot_pass[i]='\0'; //On indique le caractère de fin de ligne
        if(strcmp(mot_pass, PASS)!=0)
        {
            printf("\n Mot de passe invalide \a\n");
        }
    }while(strcmp(mot_pass,PASS)!=0);
Voici le code complet : copie du code source dans le sous dossier code source
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include<conio.h>
#define NAME "username"
#define PASS "password"
#define ENTER 13
#define BACKSPACE 8
int main()
{
    char c,nom_user[20],mot_pass[20],chaine[20];
    int nb,i;
    do
    {
        system("CLS");
        printf("Nom  d'utilisateur : ");
        scanf("%s",nom_user);
        if(strcmp(nom_user,NAME)!=0)
        {
            printf("Nom d'utilisateur invalide !");
            getch();
        }
    }while(strcmp(nom_user,NAME)!=0);
    do
    {
        printf("Mot de passe : ");
        nb=0;
        while((c=getch())!=ENTER)
        {
            if(c!=BACKSPACE && nb<20)
            {
                chaine[nb]=c;
                nb++;
                printf("*");
            }
            else
            {
                if(nb>0)
                {
                    //Pour gérer l'effacement
                    nb--;
                   chaine[nb]='\0';
                }
            }
        }
        //On copie tous les caractères contenu dans la chaine
        for(i=0;i<nb;i++)
        {
            mot_pass[i]=chaine[i];
        }
        mot_pass[i]='\0'; //On indiquele caractère de fin de ligne
        if(strcmp(mot_pass,PASS)!=0)
        {
            printf("\nMot de passe invalide \a\n");
        }
    }while(strcmp(mot_pass,PASS)!=0);
    return 0;
}