Mon programme redemmare dans l'utilisation de saisie caractères
develdelphi
Messages postés97Date d'inscriptionmercredi 7 avril 2004StatutMembreDernière intervention20 avril 2009
-
10 juin 2007 à 17:52
Loki6
Messages postés286Date d'inscriptiondimanche 27 novembre 2005StatutMembreDernière intervention27 décembre 2009
-
12 juin 2007 à 14:21
Bonjour
voici un programme qui permet de faire une saisie de mot de passe jusqu'à 8 caractères, il fonctionne très bien avec DevC++ mais j'utilise un système embarqué donc un compilateur dedié aux microcontrolleurs et j'ai des soucis à cause de ça, voici mon code :
while ((lettre = getch ()) != '\r')
{
if (lettre == BS)
{
if (i > 0)
{
putch (lettre);
putch (' ');
putch (lettre);
i--;
}
else
{
putchar (BEL);
}
}
else
{
if (i < size - 1)
{
tampon[i] = lettre;
i++;
putch ('*');
}
else
{
putchar (BEL);
}
}
}
tampon[i] = 0;
}
void Users_mode (void)
{
unsigned char choiceuser;
int typeutil = 0;
printf ("Would you like to enter in administrator mode (Y/N) ?\n\n");
choiceuser = getchar (); if ((choiceuser 'Y') || (choiceuser 'y'))
{
char pwd[8];
do
{
printf ("\nEntrez le mot de passe :\n");
lire_mp (pwd, sizeof pwd);
}
while (verifie_passe (pwd) == 0);
printf ("\nbienvenue\n");
typeutil = 1;
printf ("You are in administrator mode \n");
}
if ((choiceuser 'N') || (choiceuser 'n'))
{
typeutil = 0;
//printf("You aren't in administrator mode \n");
}
}
int main (void)
{
Users_mode ();
return 0;
}
<hr />
Avec mon compilateur C51 Keil µVision 2 lorsque la fonction lire_mp() est appelée ( je l'ai verifié avec debug ) mon prgramme redemarrait?
C'est je crois un problème de code dans le getch du while de la fonction lire_mp():
<hr />
while ((lettre = getchar ()) != '\r')
{
if (lettre == BS)
{ if (i > 0)
{
putchar (lettre);
putchar (' ');
putchar (lettre);
i--;
}
else
{
putchar (BEL);
}
}
else
{
if (i < size - 1)
{
tampon[i] = lettre;
i++;
putchar ('*');
}
else
{
putchar (BEL);
}
}
}
<hr />en effet en ayant mis getchar à la place de getch, ça va deja mieux car le programme ne redemarre pas mais enfait il ne faut
sans doute pas utliser getchar mais getch() mais mon compilateur Keil C51 redemarre quand j'arrive a cet endroit du code
et le resultat sur capture d'écran est bizarre :
Would you like to enter in administrator mode (Y/N) ?
y
Entrez le mot de passe :
se*s*a*s*m*e*s*s
sesmed
seememds
s
sme
e
e
On ne sort plus de la saise et après le 7 ème étoile on entend le beep à chaque saisie sur le clavier indefiniment je ne voit pas comment faire ?
DevelDelphi :)
A voir également:
Mon programme redemmare dans l'utilisation de saisie caractères
Loki6
Messages postés286Date d'inscriptiondimanche 27 novembre 2005StatutMembreDernière intervention27 décembre 20092 11 juin 2007 à 14:59
salut,
je voulais savoir ce que sont BS et BEL et pourquoi est ce que ta fonction lire_mp est de cette forme ? que cherches tu à faire d'autre que lire les caractères ?
develdelphi
Messages postés97Date d'inscriptionmercredi 7 avril 2004StatutMembreDernière intervention20 avril 2009 12 juin 2007 à 00:32
En fait ce que je veux c'est :
1)
d'abord lancer la fonction Users_mode au lancement du programme afin de
demander si on veut entrer en mode administrateur. si on repond yes on
doit rentrer un mot de passe sinon on sort et on continu normalement
dans le reste du programme.
2)
donc si on repond yes j'appelle une autre fonction (lire_mp()) qui elle
permet de masquer le caractère saisie par des "*" et deplus permet de
beeper si il y a plus de 8 caractères saisies.
Et ce 2 eme paragraphe avec la fonction lire_mp() se repetera tant que
ce qu'on aura tapé au clavier ne correspond pas au mot de passe valide
et ce via un while qui appelle la fonction verifie_passe().
voila plus concretement.
#define BEL 7
#define BS 8
BEL c'est pour beeper si le nombre de caracteres depasse 8 (BS).
mon compilateur genere un warning car ne reconnait pas le conio.h.
Que dois je faire pour que mon programme ne reboot pas ?
develdelphi
Messages postés97Date d'inscriptionmercredi 7 avril 2004StatutMembreDernière intervention20 avril 2009 12 juin 2007 à 11:25
Salut Loki,
Moi aussi avecDevC++ je vois que ça marche nickel.
Voila mon compilateur Keil C51 µVision2 me donne un warning seulement et il compile bien mais donc c'est à cause du conio.h et donc du getch().
Il faut que je fasse un autre algorithme plus simple avec les meêms options, focntionnalités mais comment ?
Ou bien implementer une autre routine tel que le getch() ??