Les pointeurs en langage C
Résolu/Fermé
limbergh
Messages postés
658
Date d'inscription
dimanche 8 juillet 2007
Statut
Membre
Dernière intervention
29 juin 2010
-
4 avril 2008 à 23:53
limbergh Messages postés 658 Date d'inscription dimanche 8 juillet 2007 Statut Membre Dernière intervention 29 juin 2010 - 5 avril 2008 à 10:08
limbergh Messages postés 658 Date d'inscription dimanche 8 juillet 2007 Statut Membre Dernière intervention 29 juin 2010 - 5 avril 2008 à 10:08
A voir également:
- Les pointeurs en langage C
- Langage ascii - Guide
- Langage binaire - Guide
- Pascal langage - Télécharger - Édition & Programmation
- Langage pascal - Télécharger - Édition & Programmation
- Dev-Pascal - Télécharger - Édition & Programmation
3 réponses
mype
Messages postés
2435
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
16 août 2010
436
5 avril 2008 à 01:29
5 avril 2008 à 01:29
ç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; }
cchristian
Messages postés
921
Date d'inscription
lundi 21 janvier 2008
Statut
Membre
Dernière intervention
6 mars 2012
131
5 avril 2008 à 02:40
5 avril 2008 à 02:40
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{} }
limbergh
Messages postés
658
Date d'inscription
dimanche 8 juillet 2007
Statut
Membre
Dernière intervention
29 juin 2010
140
5 avril 2008 à 10:08
5 avril 2008 à 10:08
merci pour vos réponses!!!