Fonction érronée qui retourne n'importe quoi
Fermé
djemaoune
Messages postés
21
Date d'inscription
jeudi 13 décembre 2007
Statut
Membre
Dernière intervention
31 mai 2011
-
10 janv. 2010 à 21:19
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 11 janv. 2010 à 22:30
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 11 janv. 2010 à 22:30
A voir également:
- Fonction érronée qui retourne n'importe quoi
- Fonction si et - Guide
- Ecran retourne - Guide
- Mon clavier fait n'importe quoi - Accueil - Informatique
- Fonction moyenne excel - Guide
- Application pour ouvrir n'importe quel fichier - Télécharger - Gestion de fichiers
5 réponses
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
10 janv. 2010 à 22:41
10 janv. 2010 à 22:41
Salut,
Ta fonction rechercheMot() ne renvoie pas de valeur dans tous les cas.
Pour t'en convaincre, mets un return -2; tout à la fin. Et tu verras bien si c'est le -2 qui est renvoyé ou pas.
Ceci explique pourquoi lorsque tu affiches la valeur retournée par cette fonction, t'obtiens un nombre erroné.
Je t'invite donc à revoir l'algorithme de la fonction.
Par ailleurs, il vaut mieux éviter d'utiliser les variables globales.
Il ne faut pas mettre d'esperluette lorsque tu mets scanf d'une chaîne de caractère. Ce n'est pas : scanf("%s",&texte); mais scanf("%s",texte); tout simplement.
scanf("%d",i);
scanf inutile et en plus il faut mettre l'adresse de la variable.
Sinon, le but de ce code c'est de reproduire la fonction standard strstr() à titre d'entraînement ?
Cdlt,
Ta fonction rechercheMot() ne renvoie pas de valeur dans tous les cas.
Pour t'en convaincre, mets un return -2; tout à la fin. Et tu verras bien si c'est le -2 qui est renvoyé ou pas.
Ceci explique pourquoi lorsque tu affiches la valeur retournée par cette fonction, t'obtiens un nombre erroné.
Je t'invite donc à revoir l'algorithme de la fonction.
Par ailleurs, il vaut mieux éviter d'utiliser les variables globales.
Il ne faut pas mettre d'esperluette lorsque tu mets scanf d'une chaîne de caractère. Ce n'est pas : scanf("%s",&texte); mais scanf("%s",texte); tout simplement.
scanf("%d",i);
scanf inutile et en plus il faut mettre l'adresse de la variable.
Sinon, le but de ce code c'est de reproduire la fonction standard strstr() à titre d'entraînement ?
Cdlt,
djemaoune
Messages postés
21
Date d'inscription
jeudi 13 décembre 2007
Statut
Membre
Dernière intervention
31 mai 2011
5
10 janv. 2010 à 23:44
10 janv. 2010 à 23:44
salut,
OK merci bien pour votre aide mais moi je comprend pas ou est le problème pour quoi il retourne n'importe quoi c pas logique tout est bon mais a part les scanf("%s",&texte); que g réglé j'ai rien trouvé d'autre même j'ai essayé de changé le nombre d'itération , j'ai essayé de supprimer le dernier retourne mai toujours il retourne la même valeur je me suis dit peut être y a un problème sur mon compilateur c ou ma machine j'utilise vista c la premier foi que je l'utilise sous vista je c pas je suis pas sur !!
je suis débutant en C ;
@++ ^^
OK merci bien pour votre aide mais moi je comprend pas ou est le problème pour quoi il retourne n'importe quoi c pas logique tout est bon mais a part les scanf("%s",&texte); que g réglé j'ai rien trouvé d'autre même j'ai essayé de changé le nombre d'itération , j'ai essayé de supprimer le dernier retourne mai toujours il retourne la même valeur je me suis dit peut être y a un problème sur mon compilateur c ou ma machine j'utilise vista c la premier foi que je l'utilise sous vista je c pas je suis pas sur !!
je suis débutant en C ;
@++ ^^
Pacorabanix
Messages postés
3248
Date d'inscription
jeudi 23 août 2007
Statut
Membre
Dernière intervention
19 mai 2013
661
11 janv. 2010 à 02:37
11 janv. 2010 à 02:37
non, il y a des problèmes dans ton code. Le C est assez délicat au niveau des pointeurs, des variables ,etc... . En général, les bugs causés par une mauvaise utilisation des pointeurs oudes variables donnent des résultats inattendus et qui dépendent de la machine. de même, si tu ne retournes rien à la fin d'une fonction, on est dans ce cas là : tu peux avoir aussi des résultats inattendus, comme toujours un nombre bizarre qui n'a apparemment aucun lien avec ton programme.
Corrige déjà ce que t'a suggéré Fiddy (y compris l'histoire du return, poste ton code de nouveau et dis-nous si ça va mieux ou ce qui cloche à ce moment et comment il réagit. Peut-être le problème n'est pas là en fait, mais avec le return -2 ça éliminera déjà une possibilité.
Corrige déjà ce que t'a suggéré Fiddy (y compris l'histoire du return, poste ton code de nouveau et dis-nous si ça va mieux ou ce qui cloche à ce moment et comment il réagit. Peut-être le problème n'est pas là en fait, mais avec le return -2 ça éliminera déjà une possibilité.
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
11 janv. 2010 à 06:25
11 janv. 2010 à 06:25
mais moi je comprend pas ou est le problème pour quoi il retourne n'importe quoi c pas logique
Je te l'ai expliqué plus haut. La fonction ne passe pas forcément par ton return. D'ailleurs, je pense que ton compilateur devrait le signaler en utilisant le warning. Ainsi si aucune valeur n'est retournée, le programme retournera la valeur de l'accumulateur qui est une valeur bidon à ce moment.
Et pour t'en convaincre, teste avec le return -2 comme je t'ai dit.
Cdlt,
Je te l'ai expliqué plus haut. La fonction ne passe pas forcément par ton return. D'ailleurs, je pense que ton compilateur devrait le signaler en utilisant le warning. Ainsi si aucune valeur n'est retournée, le programme retournera la valeur de l'accumulateur qui est une valeur bidon à ce moment.
Et pour t'en convaincre, teste avec le return -2 comme je t'ai dit.
Cdlt,
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
djemaoune
Messages postés
21
Date d'inscription
jeudi 13 décembre 2007
Statut
Membre
Dernière intervention
31 mai 2011
5
11 janv. 2010 à 21:47
11 janv. 2010 à 21:47
enfét j'ai essayé avec la solution de fiddy mais rien n'a changé c toujours le même problème g essayé d'afficher des MSGs dans les 2eme boucle imbriqué mais le résultat ma complètement beugué
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef char tab[100];
int recherchemot(int pos,tab texte,int n,tab motif,int m)
{
int j,p,b=1;
while(pos<=n)
{
printf("bonjour\n");
p=pos; j=1;
while((j<=m)and(b==1))
{
printf("bonjour\n");
if (texte[pos]==motif[j]){pos++;j++;}
else b=0;
}
if(j>m) return(p);
else {
pos=p;
pos++;
}
}
return (-1);
}
tab texte,motif;
int main()
{ int n,m,i;
printf("donner la chaine :");
scanf("%s",texte);
printf("donner la chaine :");
scanf("%s",motif);
n=strlen(texte);
m=strlen(motif);
printf("N = %d et M = %d",n,m);
i= recherchemot(1,texte,n,motif, m);
printf("le motif est a la position :%d",i);
getchar();getchar();
}
le problème la programme rentre uniquement une foi dans le 2eme while j'ai pas compris pour quoi !!!!!!!!! donc maintenant il retourne toujours -1 car il rentre termine jamais le travaille demandé dans le 2eme tant que
voici mon teste :
donner la chaine :aaaababbbb
donner la chaine :abab
N = 10 et M = 4
bonjour bonsoir
bonjour
bonjour
bonjour
bonjour
bonjour
bonjour
bonjour
bonjour
bonjour
le motif est a la position :-1
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef char tab[100];
int recherchemot(int pos,tab texte,int n,tab motif,int m)
{
int j,p,b=1;
while(pos<=n)
{
printf("bonjour\n");
p=pos; j=1;
while((j<=m)and(b==1))
{
printf("bonjour\n");
if (texte[pos]==motif[j]){pos++;j++;}
else b=0;
}
if(j>m) return(p);
else {
pos=p;
pos++;
}
}
return (-1);
}
tab texte,motif;
int main()
{ int n,m,i;
printf("donner la chaine :");
scanf("%s",texte);
printf("donner la chaine :");
scanf("%s",motif);
n=strlen(texte);
m=strlen(motif);
printf("N = %d et M = %d",n,m);
i= recherchemot(1,texte,n,motif, m);
printf("le motif est a la position :%d",i);
getchar();getchar();
}
le problème la programme rentre uniquement une foi dans le 2eme while j'ai pas compris pour quoi !!!!!!!!! donc maintenant il retourne toujours -1 car il rentre termine jamais le travaille demandé dans le 2eme tant que
voici mon teste :
donner la chaine :aaaababbbb
donner la chaine :abab
N = 10 et M = 4
bonjour bonsoir
bonjour
bonjour
bonjour
bonjour
bonjour
bonjour
bonjour
bonjour
bonjour
le motif est a la position :-1
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
11 janv. 2010 à 22:30
11 janv. 2010 à 22:30
Salut,
Enfét j'ai essayé avec la solution de fiddy
Euh, je t'ai donné aucune solution...
Je t'ai juste dit d'où venait ton problème.
Essaie de tester à la main ton algorithme, et tu verras l'erreur dans ton algorithme.
Enfét j'ai essayé avec la solution de fiddy
Euh, je t'ai donné aucune solution...
Je t'ai juste dit d'où venait ton problème.
Essaie de tester à la main ton algorithme, et tu verras l'erreur dans ton algorithme.