Jeu du pendu - question sur les pointeurs
Bonjour,
À la ligne 23 motChercher[sizeof(motAtrouver)], je me demande pourquoi il n'y a pas d'étoile devant le pointeur motChercher et pourquoi aussi à la ligne 38 où on affiche le mot caché avec printf("%s", motCherche); il n'y a pas d'étoile pour dire que c'est la valeur qu'on veut ?
Si vous pouviez m'éclairer un peu, ce serait bien parce que j'ai l'impression qu'il y a plusieurs manières d'utiliser les pointeurs. C'est le code source du jeu du pendu en C écrit dans ce site. Et dernière petite question à la ligne où est écris gagne=! strcmp(motAtrouver, motCherche); ça se lit comment s'il n'y a pas de string compare gagne=true ?
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
| #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define TRUE 1
#define FALSE 0
char lireCaractere() {
char chaine[2];
gets(chaine);
return chaine[0];
}
int main() {
int i=0;
int coups=7;
char motAtrouver[]="BONJOUR";
char lettreSaisie=' ';
int lettre_trouvee=FALSE;
char gagne=FALSE;
char* motCherche;
motCherche=malloc (sizeof (motAtrouver));
memset (motCherche,'*',sizeof (motAtrouver));
motCherche[sizeof (motAtrouver)-1]=0;
printf("Jeu de pendu \n");
do {
// Aucune lettre trouvée
lettre_trouvee=FALSE;
// Saisie d'une lettre et mise en majuscule
printf("\nVotre lettre : ");
lettreSaisie=lireCaractere();
// Comparaison avec le mot secret
for(i=0; i<strlen (motAtrouver); i++) {
if(lettreSaisie==motAtrouver[i]) {
motCherche[i]=lettreSaisie;
lettre_trouvee=TRUE;
}
}
printf("%s", motCherche); //on affiche le mot cache
if (!lettre_trouvee) {
coups--;
}
printf("\nIl vous reste %d coups.\n ", coups );
gagne=! strcmp(motAtrouver, motCherche);
}
while(!gagne && coups>0);
if ( gagne )
puts ("GAGNE");
else
puts ("PERDU");
getchar();
free (motCherche);
return 0;
} |
Merci.
Je te remercie beaucoup pour ta réponse
Ça m'a beaucoup éclairé mais à la ligne 38 je suis bloqué.
Quand tu dis Ligne 38,
Citation:
Envoyé par
dalfab
Ligne 38, dans cas "%s" printf veut un paramètre qui pointe sur la chaîne à écrire, il faut donc bien lu passer le pointeur. Si on avait *motCherche on lui transmettrait le 1er caractère et comment la fonction devinerait les autres caractères?
y a-t-il une règle ou quelque chose qui soit reliée avec un cas comme ça sur Internet parce que je ne trouve rien j'ai l'impression que lorsqu'il s'agit d'un type char pour une chaîne de caractères on n'utilise pas l'étoile.
Supposons motChercher ne pointe pas sur rien mais a les dimensions de motAtrouver peut être utilisé comme une variable je sais plus je suis emmêlé, la fonction malloc attribue une adresse à motChercher avec la taille de motAtrouver mais est-ce que elle pointe sur motAtrouver ?
Je pense avoir trouver quelque chose a ce sujet
Cas des chaines de caractères
En C , il n’éxiste de type de données pour les chaines de caractères. Les chaines de caractères sont manipulées à l’aide de tableaux de caractères.
Soit la déclaration suivante :
char * t = “hello” est équivalente à char t[ 6 ] = “hello”
permet de déclarer le pointeur t vers le premier caractère de la chaine de caractères. Le pointeur t est utilisé pour accéder à la chaine
t[0] correspond au caractère h
t[1] correspond au caractère e etc…
t[5] correspond au caractère null à la fin
merci beaucoup pour ton aide
je vais lire et relire les info que tu ma transmis ;)