Verifier un mot en C

Fermé
thotoss - 15 avril 2008 à 11:18
 thotoss - 16 avril 2008 à 09:47
Bonjour,

Voila j'ai le but de mon programme (pour faire un scrabble ) :
j'ai un mot que je rentre composé de 2,3,4, ... , ou bien 15 lettres . J'ai egalement un chevalet, composé de 7 lettres, tirées aleatoirement. Ce que je voudrais faire, c'est vérifier que les lettres que je posséde dans mon chevalet me permettent de constituer le mot que j'ai rentré
Voila le début de ma fonction, mais elle ne fonctionne pas :
int mot_valide(int plateau[15][15], char mot[20], char chevalet[7], int direction, int coord_X, int coord_Y)
{
int longueur=strlen(mot)+1;
int i,j,k,l;
int correct=1;
char * c, * c2;
for (k=0;k<longueur-1;k++)
{
int trouve=0;
for (c=&mot[0];*c && correct==1;c++)
{
for (c2=&chevalet[0];*c2 && trouve==0;c2++)
{
printf(c);printf("\n");printf(c2);printf("\n");
if (c==c2)
{
trouve=1;
c2=" ";
}
}
correct=trouve;
}
}
if (correct!=1) // mot pas dans chevalet ? //
{
printf("Vous ne disposez pas des lettres necessaires pour faire ce mot !\n");
return 0;
}
}

Voila, ma fonction retourne 1 si le mot est dans le chevalet, et 0 s'il ne l'est pas. mais il ne marche pas a la compilation...pouvez-vous m'aider ?
merci

5 réponses

Je vois que tu es avec windows vista, le programme qui teste ton code est-il compatible vista?
0
bonjour,
je suis conecté sur internet avec ce pc qui a effectivement vista, mais je programme sur mon autre pc (qui a xp )sur devc++, et il fonctionne parfaitement .*
merci si vs pouvez m'aider !
0
bonjour,

il affiche quoi comme erreur à la compilation ?
0
bjr,
alors il affiche la méme erreur pour ces 2 lignes :
for (c=&mot;*c && correct==1;c++)
for(c2=&chevalet;*c2 && trouve==0;c2++)

il affiche : cannot convert 'char**' to 'char*' in assignment

J'ai réussi a résoudre cette erreur en écrivant mot[0] et chevalet[0] ainsi :
for (c=&mot[0];*c && correct==1;c++)
for(c2=&chevalet[0];*c2 && trouve==0;c2++)
ainsi il compile, mais alor je retrouve le méme pb qui m'ocupe depuis 3 jours : je ne pointe pas sur une lettre du mot et du chevalet, mais je pointe sur le mot ou le chevalet entier ! je ne peut donc pas vérifier lettre par lettre : mon programme ne fonctionne pas !
si vous pouvez me dire comment faire svp !! merci
0
première chose : tu as vraiment besoin de passer le plateau en paramètre ? c'est un détail, mais bon...

en fait je les trouve un peu compliquées tes boucles for... avec toutes ses adresses de pointeurs... pas simple ! Surtout que tu calcules la longueur du mot.
Je te propose ces boucles :

for (i=0; ((i<longueur) && (correct==1));i++)
{
for(i2=0; ((i2<lg_chevalier) && (correct==1));i++)
{
...
}
}
0
bjr et merci de m'aider !
alors oui j'ai besoin d'avoir le plateau en paramètre car je doit le mettre a jour à chaque coup, donc j'ai besoin de l'avoir je pense, nan ?
pour les boucles, effectivement elles sont compliquées, mais si je n'utilise pas les pointeurs dans le for, comment je les utilises dans la boucle ?
merci
0
ah oui... pardon j'avais oublié de mettre le corps...

alors voyons (je suppose que les printf() ne sont là que pour vérifier ?):

printf(mot[i]);printf("\n");printf(chevalet[i2]);printf("\n");
if (mot[i] == chevalet[i2])
{
trouve=1;
chevalet[i2]=" ";
}


ça devrait fonctionner. Sinon pour le passage du plateau, le fonction que nous a donné concerne simplement la validation du mot par rapport au chevalet. Donc pour moi, ce n'est pas ici que tu mettras le plateau à jour, donc pas besoin de la passer en paramètre ( pour cette fonction ).

après tout dépend comment tu as conçu ton programme. Mais ça ne me parait pas judicieux.
0
j'ai besoin du plateau en paramétre car ensuite, dans la méme fonction, je vérifie si le mot ne sort pas du plateau.
Par contre le printf(mot[i]) ne marche pas, il me dit "invalid conversion from 'char' to 'const char*' . Et j'ai peur qu'en faisant ainsi je retrouve le méme probleme, non ? c'est a dire que mon mot[i] representera le mot entier, et le chevalet[i] representera le chevalet entier, alors que je ne voudrais que lettre par lettre ....
0

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

Posez votre question
oh la la... ça fait longtemps que je n'avais pas codé en C moi...
pour le printf, ce qu'il faut écrire c'est :
printf("%c", mot[i]);

et

printf("%c", chevalet[i2]);

Il faut lui dire le format de la chaine et des paramètres (en l'occurrence le caractère pointé par i sur le mot).
0
alors votre programme marche a merveille :
printf(mot[i]);printf("\n");printf(chevalet[i2]);printf("\n");
if (mot[i] == chevalet[i2])
{
trouve=1;
chevalet[i2]=" ";
}
0
thotoss > thotoss
15 avril 2008 à 17:53
désolé jai envoyer le message sans le finir : donc sa marche, sauf la comparaison :
if (mot[i]==chevalet[i2])
qui ne vas pas, car ce sont des chaines...

il faut donc utiliser la fonction strcmp, et écrire
if (strcmp(mot[i],chevalet[i2])==0) ,
mais il ne compile pas, me mettant comme erreur : " invalid conversion from 'char' to 'const char*' .

Pour compiler, il faut mettre
if (strcmp(mot,chevalet)==0) ,

mais alors cela ne sert plus a rien et cela ne fonctionne pas !
si vous pouvez m'aider svp !
merci
0
thotoss > thotoss
15 avril 2008 à 20:27
psrsonne ne peut m'aider ??
0
thotoss > thotoss
16 avril 2008 à 09:47
un coup de pouce ?? !!
0