besoin d'aide - C - Programmation
Marsh Posté le 08-01-2006 à 12:44:37
Rien de standard, ça dépend du système d'exploitation.
Si interdiction d'utiliser getpass() et que tu es sur un unixoïde, la solution est de reconfigurer le terminal pour enlever l'écho de la saisie au clavier.
Voir tcgetattr(), tcsetattr(), termios, etc.
Marsh Posté le 08-01-2006 à 12:49:08
en fait c un exo de prog C que j'ai à rendre sur visual C++ et le prof doit faire fonctionner le progrmame et verifier qu'il marche
voila merci
Marsh Posté le 08-01-2006 à 12:51:41
propose ton code, ensuite on voit ce qui va ou pas. Ce sont les règles de la cat.
Marsh Posté le 08-01-2006 à 12:53:41
ok je comprend mai ca va etre dur car je sais meme pas comment partir car je suis une merde
mais merci quand meme
Marsh Posté le 08-01-2006 à 15:04:51
mimou33 a écrit : ok je comprend mai ca va etre dur car je sais meme pas comment partir car je suis une merde |
Si c'est ça, on tire la chasse d'eau, et on en parle plus.
La réussite commence par l'estime de soi. Commence par travailler ça...
Ensuite écrit l'algorithme.
Marsh Posté le 08-01-2006 à 18:30:07
je m'estime mais quand tu sais pas tu sais pas, c pas grave
merci
Marsh Posté le 08-01-2006 à 18:35:11
Si tu ne fais pas le moindre effort, on ne peux pas t'aider
Marsh Posté le 09-01-2006 à 03:14:10
mimou33 a écrit : ok je comprend mai ca va etre dur car je sais meme pas comment partir |
Une boucle de saisie du nom et du mot de passe, un appel à une fonction qui vérifie (elle-aussi à l'aide d'une boucle) si le couple est présent dans le fichier et qui renvoie 0 ou 1 selon le cas. Et un enregistrement du nom saisi et du mot de passe dans un fichier log. Rien de bien sorcier...
mimou33 a écrit : je sais meme pas comment partir |
partir, c'est mourir un peu... mais mourir c'est partir beaucoup
Marsh Posté le 09-01-2006 à 17:55:34
#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);
}
}
j'ai reussi a taper ca mai g un probleme au niveau de l'ouverture des fichier
il arrive pas a lire mon fichier
merci
Marsh Posté le 09-01-2006 à 20:59:54
mimou33 a écrit :
|
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...
Marsh Posté le 09-01-2006 à 21:34:28
mimou33 a écrit : j'ai reussi a taper ca mai g un probleme au niveau de l'ouverture des fichier |
Ok, pour un permier jet, il y a de l'idée...
A lire : http://mapage.noos.fr/emdel/notes.htm
Marsh Posté le 08-01-2006 à 12:38:29
bonjour, je doit réaliser un programme en C qui permette de saisir un mot de passe d'un
utilisateur.
Détails :
- 5 utlisateurs et 5 mots de passe correspondant seront stockés dans un
fichier.
- Le couple <login, passwd >sera testé. S'il est correct (existant dans le
fichier précédent) un message
d'acceptation sera affiché, sinon un message "<login> : vous n'avez pas
rentré le bon mot de passe !" sera affiché.
- Toutes les tentatives seront stockées dans un fichier de log.
sans utiliser getpass()
je demande votre aide car j'ai enormementde mal en programmation Cdonc si vous pourriez me donner quelque pistes afin que je reussise a réaliser ce programme
merci d'avance