Probleme boucle de test

Résolu
cs_nach73 Messages postés 34 Date d'inscription dimanche 24 avril 2005 Statut Membre Dernière intervention 18 mai 2005 - 5 mai 2005 à 13:58
steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 - 5 mai 2005 à 16:52
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

vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
5 mai 2005 à 14:11
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...
3
steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 5
5 mai 2005 à 14:14
int TestChaine(const char *ch)

{

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

return 1;

return 0;

}
3
cs_nach73 Messages postés 34 Date d'inscription dimanche 24 avril 2005 Statut Membre Dernière intervention 18 mai 2005
5 mai 2005 à 14:16
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);
.........
}
0
cs_nach73 Messages postés 34 Date d'inscription dimanche 24 avril 2005 Statut Membre Dernière intervention 18 mai 2005
5 mai 2005 à 14:29
merci a tout les 2
0

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

Posez votre question
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
5 mai 2005 à 16:14
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] == '>'

?
0
steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 5
5 mai 2005 à 16:52
si, bien vu
0
Rejoignez-nous