Les pointeurs en langage C
Résolu
limbergh
Messages postés
669
Statut
Membre
-
limbergh Messages postés 669 Statut Membre -
limbergh Messages postés 669 Statut Membre -
Bonsoir,
j'ai commencer un jeu de pendu, avec lequelle j'ai fait une fonction incrémentation quand le joueur trouve une lettre pour ne pas que son quota de coup diminue si il trouve la bonne lettre. Cette fonction fonctionne très bien avec des variables globales mais dès que je veux utiliser des variables locales avec des pointeurs ma fonction ne fonctionne plus...
je met ici mon code avec les variables globales (celui qui fonctionne), si quelqu'un à une idée pour faire avec des variables locales, je suis preneur pour des explications...
Merci d'avance
Voici mon code
j'ai commencer un jeu de pendu, avec lequelle j'ai fait une fonction incrémentation quand le joueur trouve une lettre pour ne pas que son quota de coup diminue si il trouve la bonne lettre. Cette fonction fonctionne très bien avec des variables globales mais dès que je veux utiliser des variables locales avec des pointeurs ma fonction ne fonctionne plus...
je met ici mon code avec les variables globales (celui qui fonctionne), si quelqu'un à une idée pour faire avec des variables locales, je suis preneur pour des explications...
Merci d'avance
Voici mon code
#include <stdio.h>
#include <stdlib.h>
void compteur( char a);
char mot_a_trouve[5];
char mot[5];//mot introduit
int nbessai=10;
int choix, i;
char lc;//lettre composée
int main(int argc, char *argv[])
{
for(i=0;i<=5;i++)
mot_a_trouve[i]='*';
do
{
printf("\n\n-1- choisissez un mot!!! : ");
printf("\n-2- affichez le mot choisi!!! : ");
printf("\n-3- tapez une lettre : ");
printf("\n votre choix==============>");
scanf("%d", &choix);
getchar();
switch(choix)
{
case 1 :
printf("introduisez un mot de 6 caracteres : ");
scanf("%s", &mot);
break;
case 2 :
printf("\n\nle mot choisi est : %s" , mot);
break;
case 3 :
printf("\n =====LE PENDU=======");
for (nbessai=10;nbessai>0;nbessai--)
{
printf("\n il vous reste %d coups a jouer", nbessai);
printf("\n introduisez une lettre : ");
scanf("%c", &lc);
getchar();
for (i=0;i<=5;i++)
{
if (lc==mot[i])
mot_a_trouve[i]=lc;
compteur(lc);
}
for(i=0;i<=5;i++)
printf("%c",mot_a_trouve[i]);
}
break;
}
}
while(choix!=0);
system("PAUSE");
return 0;
}
void compteur( char a)
{
if(a==mot[i])
{
nbessai++;
}
else{}
}
A voir également:
- Les pointeurs en langage C
- Langage ascii - Guide
- Langage binaire - Guide
- Langage visual basic - Télécharger - Langages
- Que veut dire pdf en langage sms ✓ - Forum Programmation
- Pascal langage - Télécharger - Édition & Programmation
3 réponses
ça m'etonne que ton code actuel marche il y a quelques erreurs dedans
comme tu demandes des mots de 6 lettres il te faudrais des tableau de taille 6 et pas 5 dans les declaration
ensuite il te faut changer aussi tes boucle for a ce moment
ton scanf pour stocké le mot n'est pas correct il n'y a pas de "&" puisque mot est un tableau
ensuite ton systeme de rajouter un essai quand la lettre est trouvé ne va pas fonctionné dans tous les cas imagine que l'utilisateur trouve deux fois de suite la lettre a ce moment il verra son nombre d'essai augmenté il pourra meme obtenir 12essais...
enfin je te conseille plutot une boucle while avec une variable trouve pour deduire si on doit diminué le nombre d'essais ou pas
voila essayes comme ça ça devrait aller
comme tu demandes des mots de 6 lettres il te faudrais des tableau de taille 6 et pas 5 dans les declaration
ensuite il te faut changer aussi tes boucle for a ce moment
ton scanf pour stocké le mot n'est pas correct il n'y a pas de "&" puisque mot est un tableau
ensuite ton systeme de rajouter un essai quand la lettre est trouvé ne va pas fonctionné dans tous les cas imagine que l'utilisateur trouve deux fois de suite la lettre a ce moment il verra son nombre d'essai augmenté il pourra meme obtenir 12essais...
enfin je te conseille plutot une boucle while avec une variable trouve pour deduire si on doit diminué le nombre d'essais ou pas
voila essayes comme ça ça devrait aller
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
char mot_a_trouve[6];
char mot[6];//mot introduit
int nbessai=10;
int choix, i;
char lc;//lettre composée
int trouve=0;
for(i=0;i<6;i++)
mot_a_trouve[i]='*';
do
{
printf("\n\n-1- choisissez un mot!!! : ");
printf("\n-2- affichez le mot choisi!!! : ");
printf("\n-3- tapez une lettre : ");
printf("\n votre choix==============>");
scanf("%d", &choix);
getchar();
switch(choix)
{
case 1 :
printf("introduisez un mot de 6 caracteres : ");
scanf("%s", mot);
break;
case 2 :
printf("\n\nle mot choisi est : %s" , mot);
break;
case 3 :
printf("\n =====LE PENDU=======");
while (nbessai>0)
{
printf("\n il vous reste %d coups a jouer", nbessai);
trouve=0;
printf("\n introduisez une lettre : ");
scanf("%c", &lc);
getchar();
for (i=0;i<6;i++)
{
if (lc==mot[i]){
mot_a_trouve[i]=lc;
trouve++;}
}
if(trouve==0)
nbessai=nbessai-1;
for(i=0;i<6;i++)
printf("%c",mot_a_trouve[i]);
}
break;
}
}
while(choix!=0);
system("PAUSE");
return 0;
}
Bonsoir
En complément au post de Mype,
En complément au post de Mype,
#include<stdio.h>
#include<conio.h>
*/
// J'ai fait un test de fonctionnement portant sur la correction relative
// aux passations de valeurs, je n'ai pas poussé les tests sur l'aspect cohérence de
// fonctionnement du problème traité par ce programme.
#include <stdio.h>
#include <stdlib.h>
// (voir compteur)
void compteur( char *a, int *i, char (*mot), int *nb_essai);
int main(int argc, char *argv[])
{
//J'ai agrandi les tableaux (par précaution).
char mot_a_trouve[16];
char mot[16];//mot introduit
int nbessai=10;
int choix, i;
char lc;//lettre composée
// Là tu débordais du tableau avec 5 éléments lorsque dans la boucle
// i est = 5 en partant de 0 tu es sur le 6ième élément du tableau.
// Pour char mot_a_trouve [5] = "0123"; tu ne disposes que de 4
// éléments utiles indicés par des valeurs d'indice allant de 0 0à 3.
// le 5ième (le dernier, ici valeur d'indice 4) est "réservé" à '\0'.
// Pour s'en persuader fait : char mot_a_trouve [5] = "0123", puis
// tu compiles il n'y aura pas d'erreur, ajoute un caractère :
// char mot_a_trouver [5] = "01234"; tu auras ce type de message :
// "'mot_a_trouver' : dépassement des limites du tableau".
for(i=0;i<=5;i++)
mot_a_trouve[i]='*';
do
{
printf("\n\n-1- choisissez un mot!!! : ");
printf("\n-2- affichez le mot choisi!!! : ");
printf("\n-3- tapez une lettre : ");
printf("\n votre choix==============>");
scanf("%d", &choix);
getchar();
switch(choix)
{
case 1 :
printf("introduisez un mot de 6 caracteres : ");
scanf("%s", &mot);
break;
case 2 :
printf("\n\nle mot choisi est : %s" , mot);
break;
case 3 :
printf("\n =====LE PENDU=======");
for (nbessai = 10; nbessai > 0; nbessai--)
{
printf("\n il vous reste %d coups a jouer", nbessai);
printf("\n introduisez une lettre : ");
scanf("%c", &lc);
getchar();
// Idem (débordement)
for (i = 0; i <= 5; i++)
{
if (lc==mot[i])
mot_a_trouve[i]=lc;
// rappel :
// & : obtention de l'adresse d'un objet occupant un emplacement
// de la memoire. (mot_a_trouve est dirrectement l'adresse du
// début du tableau, donc pas de &)
compteur(&lc, &i, mot_a_trouve, &nbessai);
}
// Idem (débordement)
for (i = 0; i <= 5; i++)
printf("%c",mot_a_trouve[i]);
}
break;
}
}
while(choix!=0);
system("PAUSE");
return 0;
}
// rappel :
//L'expression *x signifie : acces a l'emplacement memoire
// dont x contient l'adresse (donc au contenu de x).
void compteur( char *a, int *i, char (*mot), int *nbessai)
{
//Attention : tu modifies ici nbessai qui est utilisé dans la
// boucle for (nbessai=10;nbessai>0;nbessai--),c'est dangereux.
if (*a==mot[*i])
{
nbessai++;
}
// Inutile
//else{}
}