Question de logique en C
jason-live
Messages postés
178
Date d'inscription
Statut
Membre
Dernière intervention
-
loupius Messages postés 697 Date d'inscription Statut Membre Dernière intervention -
loupius Messages postés 697 Date d'inscription Statut Membre Dernière intervention -
Bonjour, je vous donne mon code :
#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"))
{
printf ("echec de l'authentification\n");
}
else
printf ("mot de passe correct\n");
}
while(nomDePersonnes != 0);
return 0;
}
ne serait-ce pas mieux de faire ça :
if (strcmp(MotDePasseDavid,"abc123"))
{
printf ("mot de passe corect\n");
}
else
printf ("echec de l'authenrification\n");
}
PLUTOT que ça par simple question de logique ?
if (strcmp(MotDePasseDavid,"abc123"))
{
printf ("echec de l'authentification\n");
}
else
printf ("mot de passe correct\n");
}
#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"))
{
printf ("echec de l'authentification\n");
}
else
printf ("mot de passe correct\n");
}
while(nomDePersonnes != 0);
return 0;
}
ne serait-ce pas mieux de faire ça :
if (strcmp(MotDePasseDavid,"abc123"))
{
printf ("mot de passe corect\n");
}
else
printf ("echec de l'authenrification\n");
}
PLUTOT que ça par simple question de logique ?
if (strcmp(MotDePasseDavid,"abc123"))
{
printf ("echec de l'authentification\n");
}
else
printf ("mot de passe correct\n");
}
A voir également:
- Question de logique en C
- Et logique excel - Guide
- Afpa tests niveau 3 d'entrée en formation : français, maths, logique - Forum Études / Formation High-Tech
- Lecteur logique ✓ - Forum Windows
- Simulateur logique combinatoire en ligne - Télécharger - Vie quotidienne
- Tableau analyse logique pdf - Guide
14 réponses
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.
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
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
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
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"); }
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
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.
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.