C'est pas bon ça?Code:
1
2 motcle = strtok(ligne, "\t"); def = strtok(NULL, "\t");
Version imprimable
C'est pas bon ça?Code:
1
2 motcle = strtok(ligne, "\t"); def = strtok(NULL, "\t");
Si, mais il manque le type des deux variables... Il suffit de lire la doc de strtok().Citation:
Envoyé par overdrive77310
D'aprés ce que j'ai compris en lisant ceci:
http://man.developpez.com/man3/strtok.3.php
Il faut que je renvoi l'argument S.
Comment?
C'est bien ça?Code:char *strtok (char *s, const char *delim);
Comment dois-je l'incruster dans la ligne strtok? ou alors c'est une ligne apart?
Tu as une drôle de façon de t'exprimer...Citation:
Envoyé par overdrive77310
La fonction strtok() renvoie l'adresse du premier élément de la sous chaine. Il suffit donc de la stocker dans un char *. 'motcle' et 'def' sont donc des char *.
C'est pas clair pour toi les pointeurs, les tableaux, les chaines de caractères ?
Oups désolé, je ne comprenais pas par quoi devait etre remplacés *s.
J'obtient donc pour le moment:
Code:
1
2
3
4
5
6
7 while (fgets(ligne, sizeof ligne, definitions) != NULL) { /* traiter la ligne... */ char *motcle = strtok(ligne, "\t"); char *def = strtok(NULL, "\t"); }
OK, tu n'as plus qu'a faire la comparaison entre motcle et le mot demandé et à afficher la définition si ça colle.Citation:
Envoyé par overdrive77310
Il est possible qu'il faille tout forcer en majuscule ou en minuscule avant de comparer... Ca dépend de ce qu'il y a réellement dans le fichier des définitions...
Attention aussi à ignorer les accentuées...
Si l'utilisateur entre un accent, la fonction fgets() affiche une erreur et demande a l'utilisateur de réentrer un mot. De plus je demandes a la personne d'entrer un mot sans espaces et sans accent.Citation:
Envoyé par Emmanuel Delahaye
Pour la comparaisons entre les deux, je penses que c'est quelque chose comme ceci:
mot= mot entré par l'utilisateur.Code:strcmp(mot,motcle);
motcle= mot qui se trouve dans le fichier texte avant la tabulation.
Aprés, il faudra peut-etre mettre une boucle if, puis une else si le mot ne se trouve pas dans le fichier texte?
OK. Il n'y a donc pas d'accent dans les mots clés.Citation:
Envoyé par overdrive77310
Oui. Tu as bien lu la doc de strcmp() et tu sais donc bien ce qu'elle retourne...Citation:
Pour la comparaisons entre les deux, je penses que c'est quelque chose comme ceci:
mot= mot entré par l'utilisateur.Code:strcmp(mot,motcle);
motcle= mot qui se trouve dans le fichier texte avant la tabulation.
Ben oui, faut te lancer un peu tout seul, là, on ne sera pas toujours là pour te tenir la main...Citation:
Aprés, il faudra peut-etre mettre une boucle if, puis une else si le mot ne se trouve pas dans le fichier texte?
Nota : Il n'y a pas de 'boucle if'. Il y a la 'structure de code if'.
J'ai trouvé la doc de la strcmp.
Voici ce que je dois marquer:
our la suite, je me lances.Code:int strcmp (const char *mot, const char *motcle);
Pas vraiment, non. Tu ne sais pas appeler une fonction ?Citation:
Envoyé par overdrive77310
Et la valeur retournée, tu as vu ce que c'est ? Tu as pu déterminer ce que retournait la fonction en cas d'égalité ?
if (strcmp(mot, motcle)!=0)
j'affiche la definitions.
if (strcmp(mot, motcle)>0)
Je n'affiche rien du tout, je passe mon chemain avec un return 1.
if (strcmp(mot, motcle)<0)
Je n'affiche rien du tout, je passe mon chemain avec un return 1.
C'est bien ça?
( tout cela se trouve dans une boucle while).
Edit, j'ai essayé comme ceci: ça ne marche pas.
Je crois qu'il faut que tu relises la description de la fonction un peu mieux que ça...Citation:
Envoyé par overdrive77310
J'ai essayé comme ceci:
est-ce une bonne idée.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 while (fgets(ligne, sizeof ligne, definitions) != NULL) (cpt < 3); { /* traiter la ligne... */ char *motcle = strtok(ligne, "\t"); char *def = strtok(NULL, "\t"); resultat = strcmp(mot, motcle); if (resultat > 0) // < ? >? != ? == ? je ne sais pas lequel choisir. printf("les deux chaines sont identiques"); else printf("les chaines sont differentes") ; cpt++; }
PS: les lignes s'affiche plusieur fois même si je regle un compteur pour que la boucle ne se fasse qu'une fois.
Pour les mot commençant par P il me dit les deux chaine sont identique et pour ceux ne commençant pas par un P les chaine ne sont pas identique.
Franchement arrête de taper du code au hasard. Commence par écrire un algorithme correct, et ensuite code le.Citation:
Envoyé par overdrive77310
Quand au codage, je t'ai déjà demandé de relire la doc de strcmp(). Tu ne la comprends pas ou quoi ?
Je te pose une question simple :
"Quelle est la valeur retournée par strcmp() quand les chaines sont identiques."
Tant que tu n'as pas répondu clairement à cette question, c'est pas la peine de continuer et je ne fournirais pas d'aide supplémentaire.
Si tu n'es pas capable de lire une doc, faut pas faire d'informatique.
Ba, si les chaines sont identiques, la valeur renvoyé est superieur a zero. Si les chaines sont differentes la valeur renvoyée est negative.
Chaines identique > 0
Chaines differentes < 0
On doit pas lire la même doc sur la fonction strcmp() alors :?
J'avais trouvé des informations en cherchant un peu, et c'etait a peu prés ça. Le morceau de code que j'ai mis dans mon code, je l'ai trouvé sur internet en cherchant mais parement, ce n'est pas bon.
Aurait-tu un lien a me donner?
strcmp dans google :roll:
Comment crois-tu que j'ai trouvé le bout de code qui est dans mon code?
Je cherches dans google, mais je ne trouve pas, tu peux me passer un lien pour la doc au moin :) ?
edit: j'ai trouvé ceci:
http://bat710.univ-lyon1.fr/~jciehl/.../strcmp.3.html
OK. Et ça, c'est clair ?Citation:
Envoyé par overdrive77310
"Elle renvoie un entier négatif, nul, ou positif, si s1 est respectivement inférieure, égale ou supérieure à s2."