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

BADZI Messages postés 3 Date d'inscription vendredi 4 novembre 2011 Statut Membre Dernière intervention 9 novembre 2011 - 7 nov. 2011 à 23:10
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 - 9 nov. 2011 à 09:00
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

pop70 Messages postés 181 Date d'inscription mardi 6 avril 2010 Statut Membre Dernière intervention 7 janvier 2012 10
7 nov. 2011 à 23:47
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
0
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
8 nov. 2011 à 09:16
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...
0
BADZI Messages postés 3 Date d'inscription vendredi 4 novembre 2011 Statut Membre Dernière intervention 9 novembre 2011
9 nov. 2011 à 00:00
Merci beaucoup pour votre aide
0
BADZI Messages postés 3 Date d'inscription vendredi 4 novembre 2011 Statut Membre Dernière intervention 9 novembre 2011
9 nov. 2011 à 00:02
En faite c'est quoi une balise code??
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
pop70 Messages postés 181 Date d'inscription mardi 6 avril 2010 Statut Membre Dernière intervention 7 janvier 2012 10
9 nov. 2011 à 07:09
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
0
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
9 nov. 2011 à 09:00
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...
0
Rejoignez-nous