Question de logique en C
Fermé
jason-live
Messages postés
178
Date d'inscription
mardi 1 septembre 2009
Statut
Membre
Dernière intervention
26 décembre 2009
-
3 nov. 2009 à 15:27
loupius Messages postés 697 Date d'inscription dimanche 1 novembre 2009 Statut Membre Dernière intervention 31 décembre 2017 - 8 nov. 2009 à 01:51
loupius Messages postés 697 Date d'inscription dimanche 1 novembre 2009 Statut Membre Dernière intervention 31 décembre 2017 - 8 nov. 2009 à 01:51
A voir également:
- Question de logique en C
- Afpa tests niveau 5 d'entrée en formation : français, maths, logique ✓ - Forum Études / Formation High-Tech
- Et logique excel - Guide
- Tableau analyse logique pdf - Guide
- Eql test logique - Forum Études / Formation High-Tech
- Simulateur de circuit logique - Télécharger - Vie quotidienne
14 réponses
loupius
Messages postés
697
Date d'inscription
dimanche 1 novembre 2009
Statut
Membre
Dernière intervention
31 décembre 2017
148
3 nov. 2009 à 15:31
3 nov. 2009 à 15:31
La communauté te remercie vivement pour le don de ton code ;-)
En échange, elle te souhaite une très bonne journée.
En échange, elle te souhaite une très bonne journée.
dragondark
Messages postés
465
Date d'inscription
samedi 23 février 2008
Statut
Membre
Dernière intervention
27 avril 2016
157
3 nov. 2009 à 15:29
3 nov. 2009 à 15:29
En te remerciant
Cordialement
Dragondark de lonlindil
Cordialement
Dragondark de lonlindil
Pilow
Messages postés
400
Date d'inscription
vendredi 2 octobre 2009
Statut
Membre
Dernière intervention
23 décembre 2009
71
3 nov. 2009 à 15:32
3 nov. 2009 à 15:32
N'oublie pas d'utiliser des balises codes dans tes messages, ça facilite la lecture
De http://www.linux-kheops.com/doc/man/manfr/man-html-0.9/man3/strcmp.3.html :
Donc if (strcmp(S1, S2) > 0) => Différent, donc pas de bon mot de passe
PS : Un moment que j'ai pas fais de C, je dis peut-être nawak
De http://www.linux-kheops.com/doc/man/manfr/man-html-0.9/man3/strcmp.3.html :
Les fonctions strcmp() et strncmp() renvoient un entier inférieur, égal ou supérieur à zéro si s1 (ou ses n premiers octets) est respectivement inférieure, égale ou supérieure à s2.
Donc if (strcmp(S1, S2) > 0) => Différent, donc pas de bon mot de passe
PS : Un moment que j'ai pas fais de C, je dis peut-être nawak
jason-live
Messages postés
178
Date d'inscription
mardi 1 septembre 2009
Statut
Membre
Dernière intervention
26 décembre 2009
35
3 nov. 2009 à 15:32
3 nov. 2009 à 15:32
stp si ta une question pose la pas ici jsuis assez emmerder avec mon programme merci !!!!
bon en faite j'ai changé en fesant comme ça :
if (strcmp(MotDePasseDavid,"abc123"))
{
printf ("echec de l'authentification\n");
}
else
printf ("mot de passe correct\n");
et ça marche alors que l'autre bout de code que j'avais mis:
if (strcmp(MotDePasseDavid,"abc123"))
{
printf ("mot de passe correct\n");
}
else
printf ("echec de l'authentification\n");
il fonctionne mal !!!
merci de me dire pourquoi, pour moi sa me semble logique :S
bon en faite j'ai changé en fesant comme ça :
if (strcmp(MotDePasseDavid,"abc123"))
{
printf ("echec de l'authentification\n");
}
else
printf ("mot de passe correct\n");
et ça marche alors que l'autre bout de code que j'avais mis:
if (strcmp(MotDePasseDavid,"abc123"))
{
printf ("mot de passe correct\n");
}
else
printf ("echec de l'authentification\n");
il fonctionne mal !!!
merci de me dire pourquoi, pour moi sa me semble logique :S
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
jason-live
Messages postés
178
Date d'inscription
mardi 1 septembre 2009
Statut
Membre
Dernière intervention
26 décembre 2009
35
3 nov. 2009 à 15:34
3 nov. 2009 à 15:34
et je ne connais pas les balises de codes dsl
Pilow
Messages postés
400
Date d'inscription
vendredi 2 octobre 2009
Statut
Membre
Dernière intervention
23 décembre 2009
71
3 nov. 2009 à 15:37
3 nov. 2009 à 15:37
Les balises de code sont au dessus du champ de texte lorsque tu rédige un message, elle permettent :
Pour l'explication je l'ai donné dans le message d'avant je pense
d'écrire comme ça
Pour l'explication je l'ai donné dans le message d'avant je pense
jason-live
Messages postés
178
Date d'inscription
mardi 1 septembre 2009
Statut
Membre
Dernière intervention
26 décembre 2009
35
3 nov. 2009 à 15:39
3 nov. 2009 à 15:39
ok ok comme ça dsl
je n'ai pas compris ton explication =/
jason-live
Messages postés
178
Date d'inscription
mardi 1 septembre 2009
Statut
Membre
Dernière intervention
26 décembre 2009
35
3 nov. 2009 à 15:44
3 nov. 2009 à 15:44
bon voici j'ai essayer de le terminer :
je ne comprend si là c'est bon ce que j'ai mi :
merci de m'aider
#include <stdio.h> int main() { int nomDePersonnes; char MotDePasseDavid[] = "abc123"; char MotDePasseJason[] = "salut"; do { printf (" PROGRAMME By David Et Jason \n\n"); printf ("1. David \n"); printf ("2. Jason \n"); printf ("0. Fin du programme \n"); printf ("Appuyez sur le chiffre vous concernant \n"); scanf ("%d", &nomDePersonnes); printf ("\n\n"); switch (nomDePersonnes) { case 1: printf ("vous avez tappez le nombre 1 donc vous vous appelez David \nEntres ton mot de passe pour rentrer dans ta session ?"); scanf ("%s", &MotDePasseDavid); break; case 2: printf ("vous avez tappez le nombre 2 donc vous vous appelez Jason \nEntres ton mot de passe pour rentrer dans ta session ?"); scanf ("%s", &MotDePasseJason); break; case 0: printf ("Fin du programme \n"); break; default: printf ("vous n'avez pas tappez de nombre correct alors vous n'avez pas de prenom dans cette liste \n"); break; } if (strcmp(MotDePasseDavid,"abc123")) && (strcmp(MotDePasseJason, "salut")) { printf ("echec de l'authentification\n"); } else { printf ("mot de passe correct\n"); } while(nomDePersonnes != 0); return 0; }
je ne comprend si là c'est bon ce que j'ai mi :
if (strcmp(MotDePasseDavid,"abc123")) && (strcmp(MotDePasseJason, "salut"))
merci de m'aider
Au nom de la communauté française ...
-> vous avez tapé
-> vous n'avez pas tapé
Ensuite :
je verrais plutôt :
car tes 2 utilisateurs ne peuvent pas se connecter en même temps...
Et quitte à être logique :
-> vous avez tapé
-> vous n'avez pas tapé
Ensuite :
if (strcmp(MotDePasseDavid,"abc123")) && (strcmp(MotDePasseJason, "salut"))
je verrais plutôt :
if (strcmp(MotDePasseDavid,"abc123")) || (strcmp(MotDePasseJason, "salut"))
car tes 2 utilisateurs ne peuvent pas se connecter en même temps...
Et quitte à être logique :
if (strcmp(MotDePasseDavid,"abc123")) || (strcmp(MotDePasseJason, "salut") == 0) { printf ("mot de passe correct\n"); } else { printf ("echec de l'authentification\n"); }
jason-live
Messages postés
178
Date d'inscription
mardi 1 septembre 2009
Statut
Membre
Dernière intervention
26 décembre 2009
35
3 nov. 2009 à 16:22
3 nov. 2009 à 16:22
le programme ne marche pas :/
Pilow
Messages postés
400
Date d'inscription
vendredi 2 octobre 2009
Statut
Membre
Dernière intervention
23 décembre 2009
71
3 nov. 2009 à 16:26
3 nov. 2009 à 16:26
char MotDePasseDavid[] = "abc123"; char MotDePasseJason[] = "salut";
Tu ne donne aucune taille a tes char[] ?
while(nomDePersonnes != 0); return 0;
Cette condition marchera pas des masses aussi
Bonjour
Ton programme a quelques menus problèmes
. sans un include <string.h> il ne connaît pas la fonction strcmp ( en tous cas pour mon compilateur)
. deux petites fautes de syntaxe : des parenthèses en trop dans
2 ème faute : il te manque une accolade } avant le while, moyennant quoi il marche très bien car c'est un do { .. } while (condition);
Ensuite le de logique : puisque tu as initialisé tes deux mots de passe aux bonnes valeurs, quand tu en saisis un mauvais, l'autre reste correct. Et quand tu fais le test, tu trouves qu'il y a un des deux corrects. D'ailleurs si tu réponds 1 puis 2 en donnant deux mots de passe faux, il t'indique bien échec de l'authentification.
Enfin, et beaucoup plus grave, tu n'as rien mis pour limiter la longueur des mots de passe. La taille de MotDePasseDavid est déterminée par l'initialisation car tu n'as pas mis de longueur, c'est donc 6 caractères dans ton cas. Si quand tu saisis ce mot de passe, la personne tape plus de 6 caractères, ça va écrire plus loin que prévu dans la mémoire. Là c'est le plantage assuré. Même chose bien sûr pour l'autre mot de passe.
En résumé :
. il ne faut pas initialiser les valeurs des mots de passe, mais les dimensionner en mettant une valeur entre les []
. il faut limiter la taille de la chaine saisie dans le scanf avec %19s au lieu de %s (par exemple, si tu as dimensionné tes chaînes à 20)
. D'ailleurs, à chaque boucle, il faut 'effacer' les deux mots de passe avant la saisie, sinon tu retombes dans le cas des variables déjà initialisées
Ton programme a quelques menus problèmes
. sans un include <string.h> il ne connaît pas la fonction strcmp ( en tous cas pour mon compilateur)
. deux petites fautes de syntaxe : des parenthèses en trop dans
if (strcmp(MotDePasseDavid,"abc123")) && (strcmp(MotDePasseJason, "salut")) ->if (strcmp(MotDePasseDavid,"abc123") && strcmp(MotDePasseJason, "salut"))qui est bien la bonne condition, quoi qu'en dise blackdam
2 ème faute : il te manque une accolade } avant le while, moyennant quoi il marche très bien car c'est un do { .. } while (condition);
Ensuite le de logique : puisque tu as initialisé tes deux mots de passe aux bonnes valeurs, quand tu en saisis un mauvais, l'autre reste correct. Et quand tu fais le test, tu trouves qu'il y a un des deux corrects. D'ailleurs si tu réponds 1 puis 2 en donnant deux mots de passe faux, il t'indique bien échec de l'authentification.
Enfin, et beaucoup plus grave, tu n'as rien mis pour limiter la longueur des mots de passe. La taille de MotDePasseDavid est déterminée par l'initialisation car tu n'as pas mis de longueur, c'est donc 6 caractères dans ton cas. Si quand tu saisis ce mot de passe, la personne tape plus de 6 caractères, ça va écrire plus loin que prévu dans la mémoire. Là c'est le plantage assuré. Même chose bien sûr pour l'autre mot de passe.
En résumé :
. il ne faut pas initialiser les valeurs des mots de passe, mais les dimensionner en mettant une valeur entre les []
. il faut limiter la taille de la chaine saisie dans le scanf avec %19s au lieu de %s (par exemple, si tu as dimensionné tes chaînes à 20)
. D'ailleurs, à chaque boucle, il faut 'effacer' les deux mots de passe avant la saisie, sinon tu retombes dans le cas des variables déjà initialisées
jason-live
Messages postés
178
Date d'inscription
mardi 1 septembre 2009
Statut
Membre
Dernière intervention
26 décembre 2009
35
7 nov. 2009 à 21:09
7 nov. 2009 à 21:09
Voilà ce que ça donne :
Ce programme fonctionne très bien pour ma part.
#include <stdio.h> #include <string.h> int main() { int nomDePersonnes; char MotDePasseDavid[6] = "abc123"; char MotDePasseJason[5] = "salut"; do { printf (" PROGRAMME By David Et Jason \n\n"); printf ("1. David \n"); printf ("2. Jason \n"); printf ("0. Fin du programme \n"); printf ("Identifies toi : \n"); scanf ("%d", &nomDePersonnes); printf ("\n\n"); switch (nomDePersonnes) { case 1: printf ("vous avez tappe le nombre 1 donc vous vous appelez David \nEntres ton mot de passe pour rentrer dans ta session ?"); scanf ("%s", &MotDePasseDavid); break; case 2: printf ("vous avez tappe le nombre 2 donc vous vous appelez Jason \nEntres ton mot de passe pour rentrer dans ta session ?"); scanf ("%s", &MotDePasseJason); break; case 0: printf ("Fin du programme \n"); break; default: printf ("vous n'avez pas tappe de nombre correct alors vous n'etes pas dans cette liste \n"); break; } if (strcmp(MotDePasseDavid,"abc123") && strcmp(MotDePasseJason, "salut")) { printf ("echec de l'authentification\n"); } else { printf ("mot de passe correct. \nBienvenue dans votre espace perso \n"); } } while(nomDePersonnes != 0); return 0; }
Ce programme fonctionne très bien pour ma part.
jason-live
Messages postés
178
Date d'inscription
mardi 1 septembre 2009
Statut
Membre
Dernière intervention
26 décembre 2009
35
7 nov. 2009 à 21:13
7 nov. 2009 à 21:13
mais je ne me rappelle plus pourquoi j'ai mi :
et je ne comprend pas non plus là :
il y a 2 strcmp dans le premier on a mi une parenthèse avant et dans le 2eme on n'en a pas mi avant le strcmp, pourquoi ?
Merci de vos réponses.
while (nomDePersonnes != 0);
et je ne comprend pas non plus là :
if (strcmp(MotDePasseDavid,"abc123") && strcmp(MotDePasseJason, "salut"))
il y a 2 strcmp dans le premier on a mi une parenthèse avant et dans le 2eme on n'en a pas mi avant le strcmp, pourquoi ?
Merci de vos réponses.
loupius
Messages postés
697
Date d'inscription
dimanche 1 novembre 2009
Statut
Membre
Dernière intervention
31 décembre 2017
148
8 nov. 2009 à 01:51
8 nov. 2009 à 01:51
Les parenthèses s'utilisent par paires; il faut lire:
Bonne continuation.
if ( ... )et ce qui est à l'intérieur comme
condition1 && condition2En clair, les parenthèses dont tu parles ne sont pas liées aux strcmp.
Bonne continuation.
jason-live
Messages postés
178
Date d'inscription
mardi 1 septembre 2009
Statut
Membre
Dernière intervention
26 décembre 2009
35
7 nov. 2009 à 22:18
7 nov. 2009 à 22:18
up