topic unique Drife ^^
Forum Programmation : topic unique Drife ^^
Bonjours,
avant toutes chose un peu d'indulgnce ça fait a peine 2 semaine que je programme
j'en suis donc au chaine de caratère, un passage difficile
j'essait desespérément pour m'entrainer de reprogrammer les fonction sur chaine de caractere .
j'ai déja réussi a faire celle qui calcule la longueur de la chaine, celle
qui copie 2chaine, et celle qui concatène 2 chaine.
mais je n'arrive pas a faire celle qui compare 2chaine, et ça fait 3jour que je sèche j'en ait trop marre .
pouriez vous m'aider ?
ce programme est donc sensé dire si oui ou non les chaine sont identique, pour ça une fonction renvoie 1 pour identique, et 0 pour différent .
le problème c'est qu'elle renvoit toujours 1
voila le code :
Code :
|
je sais qu'il est foireux , mais je n'arrive pas a comprendre pourquoi.
merci de m'écliarer
Message édité par Drife le 17-11-2006 à 17:13:22
Pour overclocker :
http://www.infos-du-net.com/forum/ [...] pic-unique
Salut ,
tu dois savoir qu'une chaine de carastère se termine par un '\0', donc a mon avis l'erreur est à cette ligne :
for (i=0;chaine1[i]!='';i++)
remplace la par : for (i=0;chaine1[i]!='\0';i++)
voila corrige déjà ça.
a oui tient le '\0' n'est pas passé sur le document word (car j'ai exporté le code au document word).
mais il est bien présent ....
le problème est ailleur mais ou ????
Pour overclocker :
http://www.infos-du-net.com/forum/ [...] pic-unique
Répondre à Drife
Moi je remplacerais cette ligne :
for (i=0;chaine1[i]!='\0';i++)
par :
while(chaine1[i]!='\0' && chaine2[i]!='\0' )
et incrementer le i dans la boucle, car tu ne sais pas quel chaine est la plus longue.
apres le while, tu met un return 0;
Message édité par Anonyme le 14-10-2006 à 12:46:20
c'est vrai c'est juste
merci
Pour overclocker :
http://www.infos-du-net.com/forum/ [...] pic-unique
Répondre à Drife
Bon je me suis embrouillé, voila un programme juste :
# long fonctionComparaison(char *chaine1,char *chaine2)
# {
# long i=0;
#
# while(chaine1[i]!='\0')
# {
# if chaine1[i]!= chaine2[i] return 0;
# i++;
# }
# if chaine2[i]=='\0' return 1;
# else return 0;
# }
ben non ça marche pas
voici le code
Code :
|
la j'en suis plus au stade de demander mes erreurs, je voudrais qu'onme dise le code qui marche.
je l'étudierai et j'en apprendrais plus qu'en ramant comme un con .
Message édité par Drife le 14-10-2006 à 20:44:31
Pour overclocker :
http://www.infos-du-net.com/forum/ [...] pic-unique
Répondre à Drife
J'ai pas testé ton code, mais si tu remplaçais ça:
Code :
|
par:
Code :
|
ça marcherait déjà mieux
sui je bete putain.
la tu as mis le doigt sur quelquechose que je sentais foireux sans savoir pourquoi ^^
merci
je reposte si j'y arrive pas
Pour overclocker :
http://www.infos-du-net.com/forum/ [...] pic-unique
Répondre à Drife
et voila
ça y est cette putain de fonction marche enfin
par contre bien entendu je n'arrive absolument pas a coder celle qui cherche un caractère
je me demande si c'est bien utile de recoder toutes ces fonction mais il parait que c'est un bon entrainement^^
vous en pensez quoi ?
sinon vous auriez une piste pour reproduire cette foutue fonction qui recherche un caractere ?
merci
Pour overclocker :
http://www.infos-du-net.com/forum/ [...] pic-unique
Répondre à Drife
Oui ca peut être utile, enfin ca dépend de ton niveau.
precise ce que dois faire ta fonction recherche caractère ...
mon niveau : au cas ou vous l'auriez pas remarqué : nul ^^
je maitrise les variable et opération sur les variable , les tableau , les condition, a peu près les pointeurs.
et puis j'essaye de bien maitriser les chaine de caractere.
mon but dans la vie ?
maitriser corectement le C pour ensuite apprendre a faire du SDL ,et peu etre un jour de l'openGL
je suis très motivé j'adore programmer sauf quand je reste bloqué très longtemps sur la meme chose.
en fait je voudrais faire une fonction qui dans une chaine de caractere recherche un caractere et indique si il est présent ou non en renvoyant 1 ou zero.
ensuite si je réussi a faire ça je ferai une fonction qui grace a un pointeur sur un caractere enverrais la fin de la chaine , comme je sais plus quelle fonction déja écrite de string.h
Pour overclocker :
http://www.infos-du-net.com/forum/ [...] pic-unique
Répondre à Drife
De l'openGL, bof pas besoin d'être de maitriser a fond le C pour en faire.
Pour ta première fonction, tu parcours ta chaine de caractere comme un tableau et tu teste l'egalité avec ton caractère, dès que tu le trouve, hop un return 1, et quand tu sors de la boucle, tu fais un return 0, voila.
pour la première oui c'est assez facile j'y arrive.
par contre la 2ème c'est la ou ça coinçe...
puis quake3 a été fait avec du C et de l'openGL donc je veut en faire ^^
Pour overclocker :
http://www.infos-du-net.com/forum/ [...] pic-unique
Répondre à Drife
ques que tu veux dire par "fin de chaine" exactement
par fin de chaine j'entend ceci :
imagine une chaine boite a musique (je dis nimp
).
ma fonction , je lui envoit (chaine, 'm')
elle me renvoit "musique", soit la fin de la chaine a partir de m.
mais bon ça c'est pour plus tard lol,car pour l'instant je suis occupé avec une fonction qui se contente de dire si oui ou non le caractere demandé est prsésent dans la cahine, et il y a un défault que je n'arrive pas a éliminer.
bon tout d'abord,cette fonction marcahit très bien, tant que je définnissait d'avance le caractere rechercher.
j'ai donc voulu faire mieu, en proposant a l'utilisateur de choisir le caractere a rechercher.
j'ai donc écrit cette fonction :
Code :
|
lorsque que le caractere est présent, elle marche très bien
par contre lorsque le caractere n'est pas présent, on me dit "ce programme va etre arreter parce que ...." .
je n'arrive pas a comprendre pourquoi ça marche lorsque le caractere est dans la cahine, et que ça marche pas quand il ne l'est pas
.
merci de m'aider encore
Pour overclocker :
http://www.infos-du-net.com/forum/ [...] pic-unique
Répondre à Drife
Re !
quand il a finit de parcourir la chaine et quil la pas trouvé, il retourne 0.
Toi tu testais seulement le 1er caractere de la chaine.
# long search(char *chaine,char caractereARechercher)
# {long i;
# for(i=0;chaine[i]!=caractereARechercher;i++);
# {
# if (chaine[i]==caractereARechercher)
# return 1;
# }
# return 0;
# }
[edit] search renvoi un long, pas un char, donc dans le main, declare nbref comme un long (un int suffirait)
Message édité par Anonyme le 15-10-2006 à 17:11:06
merci de m'aider,mais ça ne marche toujours pas.
j'ai fait ce que tu m'as dit (bien que je ne comprend pas pourquoi ma fonction renverrai un long...).
le résultat ?
2 problèmes : lorsque je tape "l" par exemple, la fonction renvoit 1 alors qu'il n'y a pas de "l" dans le mot boite.
2ème problème, avec certaine lettres,comme "z", le programme me dit carément que j'ai fait quelquechose de non conforme !!!!
je ne comprend pas !!!
voiçi le code, écoute dis moi tout ce qui va pas moi j'y comprend plus rien.
quoi qu'il en soit voila le code,et merci de m'aider encore ...
Code :
|
plus généralment je ne comprend pas.
ça fait 3 semaine maintenant que j'apprend le C, et je n'ai jamais bloqué plus d'une soirée sur quelquechose,ce qui fait que le plaisir etait sans cesse renouvelé.
la par contre, je galère et je suis meme obligé de faire appel a un forum,chose que je n'avais jamais faite avant. galérer comme ça ne me procure aucun plaisir, ça me gonfle qu'aucuns de mes programmes ne marche
est ce que c'est normal d'avoir autant de difficultées ???
toi tu m'air l'air vachement balaise
a l'époque ou tu avais mon niveau (oula c'était loin ^^) tu as eu du mal avec les chaines de caractere ?
Pour overclocker :
http://www.infos-du-net.com/forum/ [...] pic-unique
Répondre à Drife
Re !
alalala toujours bloqué ^^
tu demandes pourquoi search doit renvoyer un long, en fait deja un int suffirait.
search doit renvoyer si oui ou non, un caractere est present dans la chaine, autrement dis, elle doit renvoyé un booleeen.
Comme tu as pu le voir, les booleens n'existe pas en C, on utilise generalment 1 pour vrai, et 0 pour false.
Voila pourquoi search renvoie 0 ou 1.
1er erreur que je vois dans le code :
char search(char *chaine,char caractereARechercher);
remplace char par long !
Et pour repondre a ta question, l'epoque ou j'avais ton niveau c'etait seulement ya 3 ans, au debut il faut bien apprendre les bases et puis ca passe.
Je vais tester le code sur ma machine et j'editerais.
Hello,
1. Déjà, je vois un truc super énorme.
dans la fonction search :
la boucle s'arrête dès qu'elle tombe sur "caractereARechercher".
S'il n'est pas présent ??
Et ben ça segfault (tu pètes la mémoire).
2. ta fonction search test seulement si le caratere est présent. Elle devrait plutot s'appeler : isPresent. renvoit 1 si présent, 0 sinon.
3. la bonne condition d'arrêt de ta boucle serait plutôt : fin de chaîne, qui se traduit par le caractère '\0' (backslash zéro).
pour moi, ca devrait donner un truc du genre :
Code :
|
mouths91 à dit : "[...]des rageux comme kelnem"
Répondre à Vinz42
| Anonyme a écrit : Re !
|
Heu, un char ça suffit.
A la rigueur un int. mais un long, pour stocker 0 ou 1, c'est un peu mettre une mouche dans un 600m².
mouths91 à dit : "[...]des rageux comme kelnem"
Répondre à Vinz42
Voila celui la marche
Code :
|
Il y avait plusieurs erreurs,
for(i=0;chaine[i]!=caractereARechercher;i++);
2 erreurs,
chaine[i]!=caractereARechercher -->\0, ok ca c'est ma faute
l'autre c'est le ;.
Pense a mettre des \n c'est plus jolie a l'affichage, et mettre des commentaires, ca t'aide a comprendre ce que tu fais.
@vinz42 mettre 1 ou 0 dans un int, c'est plus naturel pour commencer.
Message édité par Anonyme le 17-10-2006 à 11:56:48
| Anonyme a écrit : @vinz42 mettre 1 ou 0 dans un int, c'est plus naturel pour commencer. |
Son but, c'est d'apprendre le C pour faire du SDL et de l'OpenGL.
S'il obstrue le coté optimisation dès le début, ça va prendre du temps.
Et c'est juste une bonne pratique.
pour info :
taille en mémoire :
char < int < long
pour connaitre les vrais tailles des types :
printf(sizeof(char));
mouths91 à dit : "[...]des rageux comme kelnem"
Répondre à Vinz42
| Citation : char < int < long |
Pas d'accord
"char" est sur 1 octet
"short" est sur 2 octets
"long" est sur 4 octets
le type "int" est dépendant de l'architecture.
le reste n'est pas normé.
Sur les PC actuels, "int" est sur 4 octets, donc pour les PC, "int" == "long"
pwned!
ok cricky...
mais j'ai pas précisé l'archi ! NA!
si tu prend une Alpha, ou une sun...
ok... t'as raison.
c'est pour ça que j'avais mis sizeof... j'avais plus les tailles en tête.
mouths91 à dit : "[...]des rageux comme kelnem"
Répondre à Vinz42
lol, je cherche la petite bête dans le 600m²
Ouais, sinon, j'ai dis pas d'accord, mais en fait je le suis (c'est aussi comme ça que je le vois).
ok merci les gars de votre aide et de vos réponses ça fait plaisir
par contrre au niveau char, int, long je vais rester simple si vous permettez . pour moi,
char=[-127,+128]< int [ -2 147 483 648,2 147 483 648]= long < float < double .
on peut également assigné plus de valeurs en mettant unsigned devant, ce qui double le nombre de valeur positive mais empèche de mettre des négative.
z'avez vu les gars je connais ma leçon
nan fin voila j'en reste la moi si vous voulez bien
je revient vous embeter si je rebloque sérieusement (bien entendu ce sera sur une autre fonction, celle la je pense que je ne peut plus me planter
)
merci encore
Pour overclocker :
http://www.infos-du-net.com/forum/ [...] pic-unique
Répondre à Drife
| Citation : on peut également assigné plus de valeurs en mettant unsigned devant |
Non, il y en a autant, c'est juste que ce ne sont pas les mêmes, pour la raison que tu as donnée
| Citation : char=[-127,+128]< int [ -2 147 483 648,2 147 483 648]= long < float < double |
En pratique, ça n'a pas d'intérêt de comparer des entiers et des flottants pour la taille (puisque ceux-ci ont des codages particuliers), mais c'est exact.
Désolé, j'ai toujours pas trouvé la mouche.
Message édité par CRicky le 17-10-2006 à 13:30:17
re
désolé je revient vous embeter, avec la meme fonction en plus ^^
ça ne marche toujours pas, pourtant j'ai fait exactement ce que tu m'as dit.
Code :
|
la fonction renvoit que des 0, meme si le caractere en question est bien compris dans boite.
je crois avoir compris pourquoi, c'est une première victoire ^^
en fait, imaginons que je prend "o" . ma boucle se lance:
chaine[0]=b!=(caractereARechercher qui = o)
chaine[1]=o=caractereARechercher
le problème,c'est que la boucle continu ensuite !!!
chaine[2]=i!=caractereARechercher
et etc, resultat a la fin de la boucle, la condition n'est pas remplie, et la fonction renvoit zero ce qui est logique.
cela, je l'avais compris avant de m'embrouiller .
c'est la raison pour laquelle j'avais mis for (i=0;chaine[i]!=caractereARechercher;i++); .
le problème, comme l'a signalé un sympathique IDnaute, c'est que tant que le caractere a rechercher est présent ça marche youpi !
par contre quand il n'est plus présent ben l'OS coupe le programme parce cela fait une manip non conforme.
maintenant que j'ai compris le problème, je ne suis pas plus avancé ^^
parce que je ne vois pas comment arreter la boucle au bon moment,sans qu'elle plante si elle a une instruction fausse.
vous auriez une idée ?
merci encore
Message édité par Drife le 18-10-2006 à 13:57:18
Pour overclocker :
http://www.infos-du-net.com/forum/ [...] pic-unique
Répondre à Drife
nan, si le caractère est présent, il passe sur return, qui a pour effet de sortir de la fonction en renvoyant normalement.
J'essaie de tester ce qui merde.
mouths91 à dit : "[...]des rageux comme kelnem"
Répondre à Vinz42
ok merci
Pour overclocker :
http://www.infos-du-net.com/forum/ [...] pic-unique
Répondre à Drife
boulet !!!
chercher les 2 erreurs :
for(i=0;chaine[i]!='0';i++);
| Spoiler :
|
Message édité par Vinz42 le 18-10-2006 à 14:14:46
mouths91 à dit : "[...]des rageux comme kelnem"
Répondre à Vinz42
exuse mais le "\" ne passe pas quand je fais copier coller, mais je t'assure qu'il y est dans le prog normal
Pour overclocker :
http://www.infos-du-net.com/forum/ [...] pic-unique
Répondre à Drife
ok pour le \0.
et la, ça marche ?
enfin, chez moi, ca marche en tout cas...
mouths91 à dit : "[...]des rageux comme kelnem"
Répondre à Vinz42
ben non
Pour overclocker :
http://www.infos-du-net.com/forum/ [...] pic-unique
Répondre à Drife
ok, je reprend 2 lexomil avec mes 3 atarax, on respire et on recommence :
Code :
|
Message édité par Vinz42 le 18-10-2006 à 14:27:49
mouths91 à dit : "[...]des rageux comme kelnem"
Répondre à Vinz42
Re
bizarre, le tout drrnier code que je t'ai donné marche très bien chez moi, reprend le.
regarde bien le dernier le dernier code que j'ai posté ...
ta vu l'erreur ?
la boucle for ....
et oui, un point virgule de trop !!!!!!
voila ça marche maintenant les gars merci
je revient poster dès que j'ai transféré ma fonction sur clé (car je programme sur un autre PC) .
j'ai tenté une fonction de fous et ben sur ça marche pas ^^
Message édité par Drife le 21-10-2006 à 10:19:23
Pour overclocker :
http://www.infos-du-net.com/forum/ [...] pic-unique
Répondre à Drife
faudrait lire mes posts dès fois...
| Citation :
|
mouths91 à dit : "[...]des rageux comme kelnem"
Répondre à Vinz42
justement
c'est en lisant ton post que je me suis rendu compte de mon erreur ( faudra que remette de l'encre verte pour le truc important et évidant LOL) .
Pour overclocker :
http://www.infos-du-net.com/forum/ [...] pic-unique
Répondre à Drife
"l'encre verte", c'est les commentaires dans le code...
mouths91 à dit : "[...]des rageux comme kelnem"
Répondre à Vinz42
lol nan en fait ce qui a fait que que j'ai pas tout de suite pigé, c'est que je pensais que tu disait boulet pour le "\" manquant .
et tu m'as dit que ce code marchait,alors que dans l'exemple il y avait un ; après le for .
donc moi j'ai pensait que c'était bon ^^
mais bon mnt j'ai compris c'est bon.
merci vinz
Pour overclocker :
http://www.infos-du-net.com/forum/ [...] pic-unique
Répondre à Drife
you're welcome.
mouths91 à dit : "[...]des rageux comme kelnem"
Répondre à Vinz42
Moi aussi je te l'avais dit :
" 2 erreurs,
chaine[i]!=caractereARechercher -->\0, ok ca c'est ma faute
l'autre c'est le ;. "
ok merci vinz ET Cart .
de toute façon je vais vous ramenez du gros dossier croyez moi il y aura de quoi vous départager ...
Message édité par Drife le 21-10-2006 à 11:38:20
Pour overclocker :
http://www.infos-du-net.com/forum/ [...] pic-unique
Répondre à Drife
voila du gros dossier ^^
j'essait donc actuellement de faire une fonction qui copie la strchr string.h, que vous connaissez surement.
mais voila, comme d'hab,ça marche pas.
notez que je m'y serez attendu, mais la j'avoue que je sais plus trop par ou prendre le problème...
vous pouvez jetez un coup d'oeil au code ?
Code :
|
le but du programme est simple.
on envoit a une fonction une chaine et un caractere.
cette fonction,a l'aide d'un pointeur va renvoyez l'adresse du caractere que l'on reçoit.
grace a cette adresse,on affiche la fin de la chaine...
je vous remerçie d'avance
je suis au courant de la pauvretée de ce code,soyez une fois de plus indulgent ^^
Pour overclocker :
http://www.infos-du-net.com/forum/ [...] pic-unique
Répondre à Drife
T'es pas en train de faire faire un exercice aux autres ?
J'ai repéré 5 fautes, j'ai bon ?
Message édité par CRicky le 21-10-2006 à 12:32:13
oui, mais alors ce serait sympas de me dire ou
.
et plus généralement me dire grossièrement le système que je dois mettre au point,car je crois que la ou niveau de l'idée du programme je me demande si meme si le programme avait plus d'erreur si il marcherait ^^
Pour overclocker :
http://www.infos-du-net.com/forum/ [...] pic-unique
Répondre à Drife
Re,
- déjà search renvoie un pointeur et pas un char
- pourquoi tu mets "suiteChaine" ? suiteChaine est une variable.
-j'ai corrigé quelques petites fautes encore
Code :
|
[edit] rajoute le system("PAUSE" );
Message édité par Anonyme le 21-10-2006 à 15:25:55
impossibel de te poser une colle décidément ^^
je vais tenter ça merci
Pour overclocker :
http://www.infos-du-net.com/forum/ [...] pic-unique
Répondre à Drife
Il y a 976 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.
