Aide please

Résolu
cs_qsdfgh Messages postés 29 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 30 mars 2006 - 23 nov. 2005 à 15:18
cs_qsdfgh Messages postés 29 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 30 mars 2006 - 24 nov. 2005 à 12:49
bojour;

je voudrais fire un prog qui:

-lit un mot de passe dans un fichier

-lit une entrée utilisateur

-compare l'entree avec le passe du ficheir



voici ou j'ensuis:



#inclu#include <stdio.h>


#include <conio.h>


#include <signal.h>//je m'en sert pour bloquer control c

void handler(int sig)


{


system("restart");


}


main()


{


char passwd[4],buffer[4];


int ok=1;


int i=0;


FILE *fich;


signal(SIGINT,handler);


if ((fich=fopen("c:\doc.txt","r"))==NULL)


{printf("erreur \n");ok=1;}


else fread(passwd,sizeof(char),4,fich);


printf("entrez le mot de passe : ");




for(;i<4;i++)


{


buffer[i]=getche();


if (buffer[i]=='\n') break;


if (buffer[i]=='\b' && i>0) {i=i-2;printf(" \b");}


else if (i==0 && buffer[i]=='\b') {printf(" ");i--;}


else printf("\b*");


}


i=0;


for(;passwd[i]!=buffer[i] && i<3;i++);


if (i==3) ok=0;


if(ok!=1) system("restart");


fclose(fich);


return 0;


}




de <stdio.h>


#include <conio.h>


#include <signal.h>//je m'en sert pour bloquer control c

void handler(int sig)


{


system("restart");


}


main()


{


char passwd[4],buffer[4];


int ok=1;


int i=0;


FILE *fich;


signal(SIGINT,handler);


if ((fich=fopen("c:\pass.txt","r"))==NULL)


{printf("erreur \n");ok=1;}


else fread(passwd,sizeof(char),4,fich);


printf("entrez le mot de passe : ");




for(;i<4;i++)


{


buffer[i]=getche();


if (buffer[i]=='\n') break;


if (buffer[i]=='\b' && i>0) {i=i-2;printf(" \b");}


else if (i==0 && buffer[i]=='\b') {printf(" ");i--;}


else printf("\b*");


}


i=0;


for(;passwd[i]!=buffer[i] && i<3;i++);


if (i==3) ok=0;


if(ok!=1) system("restart");


fclose(fich);


return 0;


}




et mon proble me est:

il suffit que dans l'entrée il y ait une lettre au bon endroit pour

avoir acces

note: je travaille en c sou dos



merci

3 réponses

ekinox17 Messages postés 66 Date d'inscription jeudi 6 octobre 2005 Statut Membre Dernière intervention 18 janvier 2006
23 nov. 2005 à 16:38
ben dans ton iteration de coparaison tu t'est planter :

for(;passwd[i]!=buffer[i] && i<3;i++);

en fait tu verifie que l'un de tes 3 caractere est egale au caractere
de ton fichier si je ne m'abuse et donc il te faudrait pluto comparer
de cette maniere :

BOOL goodpass=TRUE;

for(int i=0;i<3;i++)

{

goodpass=goodpass*(passwd[i]==buffer[i]);

}alors good pass t'indique si ton mot de pase correspond ou bien je
pense aussi que ça marche mais bon vu que tu te casse le cul c'est que
ça doit pas marcher mais normalement on fait comme ça :

if(passwd==buffer)

goodpass=TRUE;

else

goodpass=FALSE;
3
cs_qsdfgh Messages postés 29 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 30 mars 2006
24 nov. 2005 à 12:49
merci mais il y a autre chose:

lorsque je rentre le mot de passe je n'arive pas a eliminer

la touche [enter]
3
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
23 nov. 2005 à 16:55
Comparaison de chaindes de caratères: strcpy -> retourne 0 si les 2 chaines sont égales. Du coup, en une seule ligne:
goodpass = (0==strcpy(passwd,buffer))

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
Rejoignez-nous