Sve@r | mimou33 a écrit :
#include <stdio.h>
#include <io.h>
struct acces {
char login[10];
char mdp[10];
};
void main()
{
char x[10],y[10],mot[10];
struct acces tableau[5];
short resultat;
FILE *liste, *test;
short i=0;
//Lecture des mots de passe dans le fichier
// espion
if((liste=fopen("H:\\rattrapage\\save1.txt","r" ))==NULL){
fprintf(stderr,"Probleme d'ouverture\n" );
exit(1);
}
while (!feof(liste))
{
fscanf(liste,"%s\n",mot);
printf("%s\n",tableau[i].login);
scanf("%*c" );
tableau[i].login=mot;
fscanf(liste,"%s\n",mot);
tableau[i].mdp=mot;
i++;
}
fclose(liste);
while(1)
{
//entrées des données
printf("Login :\n" );
scanf("%s%*c",&x);
printf("Password :\n" );
scanf("%s%*c",&y);
//Comparaison
//Ecriture des tentatives dans le fichier
test=fopen("H:\\rattrapage\\save2.txt","w" );
fprintf(test,"login testé : %s ---- Mot de passe : %s\n",x,y);
fclose(test);
for(i=0;i<5;i++){
if(x==tableau[i].login && y==tableau[i].mdp){
/*Acces autorisé*/
printf("<Acces autorisé au login : %s>\n",x);
exit(0);
}
}
/*Acces refusé*/
printf("<login : %s vous n'avez pas rentré le bon mot de passe!>\n",x);
}
} |
|
Pffouh... beaucoup de lacunes. On va passer du moins important au plus important
1) utilises les balises <crochet ouvrant>fixed<crochet fermant>...<crochet ouvrant>/fixed<crochet fermant> ou bien <crochet ouvrant>cpp<crochet fermant>...<crochet ouvrant>/cpp<crochet fermant> pour poster du code => il sera beaucoup plus lisible !!!
2) main() est de type "int"
3) il est plus conventionnel de nommer une structure "s_qqchose". En nommant ta structure "s_acces", tu conserves le mot clef "acces" libre pour autre chose (définir un tableau de 5 "struct s_acces" par exemple)
4) si tu avais découpé ton pgm en tâches élémentaires, chacune d'elle étant dévolue à une fonction précise, ce serait plus facile à déboguer (on teste d'abord la fonction X, puis dès qu' elle fonctionne on passe à la fonction Y, etc)
5) si on teste l'ouverture de "liste", il est alors normal de tester aussi l'ouverture de "test" et aussi normal de le fermer après l'avoir écrit (Aristote: "Il est injuste de traiter inégalement de choses égales" )
6) Puisque la variable "liste" n'est plus utilisée après sa fermeture, on peut s'en resservir et éliminer la variable "test"
7) exit(0) à la fin de l'écriture => horrible. Si un programme se déroule convenablement, on le laisse se dérouler jusqu'à la fin => on assez de structures de contrôles (if, while, for) ou fonctions pour éviter ce genre d'hérésie
8) la fonction "feof" ne sert pas à tester la fin d'un fichier. Pour ça on se sert des valeurs renvoyées par les fonctions de lecture (fgets, fread, fgetc ou fscanf). Lorsque la fonction de lecture utilisée ne lit plus, elle renvoie une valeur particulière qu'il suffit de tester pour savoir qu'on a tout lu =>
while (fgets(..., ..., liste) != NULL)
La fonction "feof()" sert juste à indiquer la raison de l'arrêt de la lecture et renvoie vrai si l'arrêt est dû à la fin du fichier (l'arrêt pourrait être dû à autre chose comme une erreur disque par exemple)
9) la variable "mot" n'est qu'un pointeur et ne changera jamais de valeur. C'est seulement la case pointée par ce pointeur (et les suivantes) qui seront successivement remplies par les différentes valeurs contenues dans le fichier. Toi tu ne stockes pas les cases pointées dans ton tableau de structures mais simplement le pointeur (toujours le même). Pour copier une chaîne dans une autre, on utilise "strcpy()" et non un bête "="
10) idem remarque "9" concernant la comparaison entre "x" et "tableau[i].login". Tu ne compares que des adresses => pour comparer des chaînes => strcmp()
11) "x" et "y "étant déjà des pointeurs (des adresses), on ne met pas "&" devant leurs noms dans "scanf" (d'ailleurs t'en n'as pas mis pour "mot" qui est pourtant la même chose que "x" dans "fscanf" => Aristote: "Il est injuste de..." )
12) "%*c" signifie que tu veux aussi faire saisir un caractère => admettons (bien que je n'en vois pas l'utilité) mais il faudrait quand-même le stocker quelque part...
Voilà, je crois que c'est tout ce qu'il y a (enfin, il y en a tellement que j'en ai sûrement sauté d'autres) mais ce sera déjà pas mal de corriger tout ça... Message édité par Sve@r le 09-01-2006 à 21:10:56 ---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
|