Probleme dans mon prog password dans la gestion ' * '

Résolu
Jarod1980 Messages postés 273 Date d'inscription samedi 5 juillet 2003 Statut Membre Dernière intervention 31 mars 2015 - 7 déc. 2004 à 10:30
Jarod1980 Messages postés 273 Date d'inscription samedi 5 juillet 2003 Statut Membre Dernière intervention 31 mars 2015 - 7 déc. 2004 à 11:54
Salut,
Voila j'ai développé un programme de password qui récupère le password crypté dans un fichier et le compare au password rentré par l'utilisateur. Le problème c'est que j'ai voulu rajouter une gestion ' * ' quand l'utilisateur rentre son mot de passe. En effet, si le mot de passe est bon dès la première tentative le prog sort de la boucle. Par contre si il se trompe la première fois le programme boucle indéfiniment même si le mot de passe rentré par l'utilisateur est bon lors de la deuxième tentative par exemple. Peut être que ma ligne de codes dans la gestion ' * ' n'est pas bonne ou bien j'ai oublié quelques choses mais je ne sais pas quoi. Par contre si l'enlève mes lignes de codes permettant la gestion '*' le prog marche.
J'ai mis ma source ci-dessous. J'espère que quelqu'un pourra m'aider à résoudre ce problème.
Merci.

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

#define LONG_MOT 100
#define LONG_CLE 100

void CESAR(char *, int cle);

int main(int argc, char *argv[])
{

char pass[LONG_MOT];
char str[100];
char sai[100];
char mot[LONG_MOT];
int cle;
int i,geth;
FILE *fichier, *fi;
fichier=fopen("password.txt","rb");

i=0;
geth=0;
cle=15;

fscanf(fichier,"%s",&str); /* recupere la chaine de caractères ds fichier
et on la stock dans str */
fclose(fichier); /* On ferme fichier */
do {
printf("\nEnter Password:");
do {

geth = getch();
if(geth != 13)
{
if(geth == '\b')
{
if(i!= 0)
{
printf("\b \b");
pass[i] = '\0';
i--;
}
}
else
{
pass[i] = geth;
printf("*");
i++;
}
}
} while(geth != 13 );
pass[i] = '\0';


CESAR(pass,cle);
/* On appel Cesar pour crypter la saisie */

}
while(strcmp (str,pass) != 0); /* On compare les 2 chaînes de caractères */

printf("\nHello!");

return 0;
}
void CESAR(char *mot, int cle) /* ---- DEFINITION Fonction Cesar ---- */
{
int i, n;
for (i=0;i<strlen(mot)-1;i++)
{
mot[i] = tolower(mot[i]); /* ---- CONVERSION en minuscule au cas où ---- */
if (mot[i] != 32) /* ---- CHIFFREMENT des caracteres autres que ESPACE ---- */
{
n = mot[i]+cle; /* ---- CONVERSION du Char mot[i] en Int ---- */
if (n<=122) /* ---- CHIFFREMENT de mot[]---- */
{
mot[i] = n; /* ---- AFFECTATION de Int n dans Char mot[i] ---- */
}
else
{
n = n - 26;
mot[i] = n; /* ---- AFFECTATION de Int n dans Char mot[i] ---- */
}
}
else /* ---- CHIFFREMENT de ESPACE en ESPACE ---- */
{
mot[i] = 32;
}
}
mot[strlen(mot)-1] = 0; /* ---- AFFECTATION ('\0') (NULL) (Code 0) en fin de chaine ---- */
}

Jarod_Delaware

1 réponse

Jarod1980 Messages postés 273 Date d'inscription samedi 5 juillet 2003 Statut Membre Dernière intervention 31 mars 2015 2
7 déc. 2004 à 11:54
Salut,
J'ai trouvé le problème. J'ai changé ma ligne de code. Maintenant ça marche.
Jarod_Delaware
3
Rejoignez-nous