Probleme boucle de test

[Résolu]
Signaler
Messages postés
34
Date d'inscription
dimanche 24 avril 2005
Statut
Membre
Dernière intervention
18 mai 2005
-
Messages postés
475
Date d'inscription
dimanche 3 octobre 2004
Statut
Membre
Dernière intervention
11 août 2006
-
Bonjour, je suis debutanr en "C".
Je cherche à test une chaine de caractère.
Elle doit commence par > et finir par <,ceci ne fonctionne pas lors du test
me renvoie tjrs "0" quoique je rentre.
et pour sortir du programme on rentre '\n',ceci fonctionne bien.
merci pour l'aide.
voila une partie du code.

int TestChaine(char *ch)
{
int y;
y=strlen(ch);
if ((ch[0]== 62) && (ch[y] == 60) || (ch[0]== 0)) //Test la chaine
return 1; //si bonne renvoie 1
else //si non renvoi 0
{
printf("Mot %s invalide",ch);
return 0;
}
}
main() voila le menu dans mon main
{
.........

do
{
do
{

printf("\nMot rechercher : ");
gets(motRecherche);
test=TestChaine(motRecherche);
}
while(test==0);
ModifChaine(motRecherche);
do
{
printf("\nMot de remplacement : ");
gets(MotRemplacement);
test=TestChaine(MotRemplacement);
}
while(test==0);
ModifChaine(MotRemplacement);
ModificationFichier(motRecherche,MotRemplacement);
}
while(motRecherche[0] != 0 && MotRemplacement[0]!= 0);
.........
}

6 réponses

Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
9
Ton éditeur à une indentation assez bizarre...

tu fais y = strlen(ch), c'est la taille du texte, par conséquent ch[y]
vaudra toujours 0. Le dernier caractère de la chaine est ch[y-1]



if (!ch[0] || (ch[0]== '>') && (ch[y-1] == '<'))



Je mets le test !ch[0] en premier car si la chaine est vide, alors y=0 et ch[y-1] te donnera ch[-1] qui n'existe pas.

Par contre, tu acceptes la chaine vide avec ca, ca correspon pas a ce
que tu veux faire (la chaine vide ne commence pas par '>'

Ce que tu veux faire à mon avis:

if (y && ch[0]== '>' && ch[y-1] == '<') return 1; else...
Messages postés
475
Date d'inscription
dimanche 3 octobre 2004
Statut
Membre
Dernière intervention
11 août 2006
4
int TestChaine(const char *ch)

{

if( ch[0] == '<' && ch[strlen(ch)-1] == '>' )

return 1;

return 0;

}
Messages postés
34
Date d'inscription
dimanche 24 avril 2005
Statut
Membre
Dernière intervention
18 mai 2005

Sorry,le voila a nouveau

int TestChaine(char *ch)
{
int y;
y=strlen(ch);
if ((ch[0]== 62) && (ch[y] == 60) || (ch[0]== 0))
return 1; //renvoie 1
else //si chaine correcte
{
printf("Mot %s invalide",ch);
return 0; //renvoie 0
} //si chaine incorrecte
}
main() // voila une partie de { // mon main
.......
do
{
do
{
printf("\nMot rechercher : ");
gets(motRecherche);
test=TestChaine(motRecherche);
}
while(test==0);
ModifChaine(motRecherche);
do
{
printf("\nMot de remplacement : ");
gets(MotRemplacement);
test=TestChaine(MotRemplacement);
}
while(test==0);
ModifChaine(MotRemplacement);
}
while(motRecherche[0] != 0 && MotRemplacement[0]!= 0);
.........
}
Messages postés
34
Date d'inscription
dimanche 24 avril 2005
Statut
Membre
Dernière intervention
18 mai 2005

merci a tout les 2
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
9
steve_clamage:



if( ch[0] == '<' && ch[strlen(ch)-1] == '>' )

return 1;

return 0;



tu préfères pas

return ch[0] == '<' && ch[strlen(ch)-1] == '>'

?
Messages postés
475
Date d'inscription
dimanche 3 octobre 2004
Statut
Membre
Dernière intervention
11 août 2006
4
si, bien vu