Problème avec la condition d'arret d'une boucle

Signaler
Messages postés
3
Date d'inscription
vendredi 4 novembre 2011
Statut
Membre
Dernière intervention
9 novembre 2011
-
Messages postés
14976
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
4 juin 2020
-
Bonsoir tout le monde, bon j'ai tenté de créer un mot de passe pour mon programme en c et donc j'ai fait une boucle pour redemander d'entrer le mot de passe dès que celui entré est faux, alors j'ai fixé une condition d’arrêt comme étant un caractère, le problème c'est que ma boucle accepte n'importe quel caractère comme condition d’arrêt a part '\n', voila mon code c:


#include<stdio.h>
#include<stdlib.h>
#include<conio.h>


int cmp(char *t)
{char a[]="Youssef";int i;
for(i=0;i<7;i++)
if(t[i]!=a[i]) return 0;
return 1;}



main()
{
int tru =1,i=0;

char c,a,d,e,T[100];

do
{
i=0;
printf("Mot de passe :\t");
do
{

T[i]=getch();

putch(4);

i++;

}while(T[i-1] !='\n');//ma condition d’arrêt qui cause probleme

printf("\n\n");

}while(cmp(T)==0);

getch();

}
Merci pour votre aide

6 réponses

Messages postés
181
Date d'inscription
mardi 6 avril 2010
Statut
Membre
Dernière intervention
7 janvier 2012
8
Salut,
un :
printf("%d", T[i-1]);


permet d'indiquer que la valeur ascii du caractère reçu quand on tape sur "Entrée" n'est pas 10 mais 13, donc
'\r' (retour chariot).


Donc:

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>


int cmp(char *t)
{
    char a[]="Youssef";
    int i;
    for(i=0; i<7; i++)
        if(t[i]!=a[i]) return 0;
    return 1;
}



main()
{
    int tru =1,i=0;

    char c,a,d,e,T[100];

    do
    {
       i=0;
        printf("Mot de passe :\t");
        do
        {

            T[i]=getch();

            putch(4);

            i++;
          //  printf("%d", T[i-1]);

        }
        while(T[i-1] !='\r');

        printf("\n\n");

    }
    while(cmp(T)==0);

    getch();
}



C++dialement,
Pop70
Messages postés
14976
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
4 juin 2020
91
Hello,
Je te conseille de prendre l'habitude de nommer tes variables correctement: truc, c, a, d, e, T...ce n'est pas très parlant...
Ensuite, si ce n'est pas pour un exo ou un TP, ta fonction cmp peut être remplacer par strcmp(), une fonction standard.

Ah, et la prochaine fois, penses aux balises code

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Messages postés
3
Date d'inscription
vendredi 4 novembre 2011
Statut
Membre
Dernière intervention
9 novembre 2011

Merci beaucoup pour votre aide
Messages postés
3
Date d'inscription
vendredi 4 novembre 2011
Statut
Membre
Dernière intervention
9 novembre 2011

En faite c'est quoi une balise code??
Messages postés
181
Date d'inscription
mardi 6 avril 2010
Statut
Membre
Dernière intervention
7 janvier 2012
8
La balise code c'est la balise qu'il y a juste au dessus de la zone de texte qui permet de taper un message sur ce forum, dans le menu

Ça sert à faire ça notamment :

#include <stdio.h>

int main (int argc, char argv){
...


ou encore

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
<html ...


bref, ça rend le code plus lisible

aah si plus de monde pouvait la voir


Pop70
Messages postés
14976
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
4 juin 2020
91
Hello,
La balise "code", tu peux la trouver, comme l'indique Pop70, au dessus de la zone de rédaction de message. Plus précisément, c'est la 3e icone en partant de la droite.

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