Pseudo pendu en 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 févr. 2008 à 21:11
limbergh Messages postés 658 Date d'inscription dimanche 8 juillet 2007 Statut Membre Dernière intervention 29 juin 2010 - 5 févr. 2008 à 11:39
limbergh Messages postés 658 Date d'inscription dimanche 8 juillet 2007 Statut Membre Dernière intervention 29 juin 2010 - 5 févr. 2008 à 11:39
A voir également:
- Pseudo pendu en C
- Jeu du pendu - Télécharger - Vie quotidienne
- Pseudo facebook - Guide
- Pseudo whatsapp - Accueil - Messagerie instantanée
- Caractère invisible pour pseudo ✓ - Forum Windows
- Changer pseudo instagram - Guide
8 réponses
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 841
4 févr. 2008 à 21:20
4 févr. 2008 à 21:20
Salut,
Tout d'abord, quelques petits conseils : créer des fonctions annexes, tu t'y retrouveras mieux.
Par exemple ta boucle for, tu pourrais la mettre dans une fonction affichePendu. Et tu appellerais affichePendu dans case3 ;)
Sinon je ne comprends pas ce que tu dis par : "ça boucle tout le printf" ?
Ton problème ne serait pas plutôt que ça ne retient pas en mémoire les lettres trouvées par l'utilisateur ?
Tout d'abord, quelques petits conseils : créer des fonctions annexes, tu t'y retrouveras mieux.
Par exemple ta boucle for, tu pourrais la mettre dans une fonction affichePendu. Et tu appellerais affichePendu dans case3 ;)
Sinon je ne comprends pas ce que tu dis par : "ça boucle tout le printf" ?
Ton problème ne serait pas plutôt que ça ne retient pas en mémoire les lettres trouvées par l'utilisateur ?
limbergh
Messages postés
658
Date d'inscription
dimanche 8 juillet 2007
Statut
Membre
Dernière intervention
29 juin 2010
140
4 févr. 2008 à 21:32
4 févr. 2008 à 21:32
salut,
oui en effet ça ne retient rien en mémoire mais en plus dans la boucle for, il me marque 10 fois la ligne du dessous...
Il doit avoir une condition d'arret mais je n'arrive pas à la définir...
oui en effet ça ne retient rien en mémoire mais en plus dans la boucle for, il me marque 10 fois la ligne du dessous...
Il doit avoir une condition d'arret mais je n'arrive pas à la définir...
mype
Messages postés
2435
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
16 août 2010
436
4 févr. 2008 à 22:03
4 févr. 2008 à 22:03
il faut placer des accolades et un getchar() et ça devrait marcher la
essaye ça
essaye ça
#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int nbessai=10; int choix, i; char mot[5]; char lc; int pendu[5]={0}; 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]) printf("%c", lc); else printf("*"); } } break; } } while(choix!=0); system("PAUSE"); return 0; }
limbergh
Messages postés
658
Date d'inscription
dimanche 8 juillet 2007
Statut
Membre
Dernière intervention
29 juin 2010
140
4 févr. 2008 à 22:17
4 févr. 2008 à 22:17
Bonsoir mype,
tu m'as déjà eiguiller quelque fois et içi je ne comprend pas à quoi sert le getchar();, mon code
fonctionne mais je ne sais pourquoi.
Pourrais-tu aussi me guider sur la façon dont je peux faire pour que quand j'ai tapé une lettre et qu'elle se trouve
dans le mot, il garde la lettre en mémoire...
Merci d'avance
tu m'as déjà eiguiller quelque fois et içi je ne comprend pas à quoi sert le getchar();, mon code
fonctionne mais je ne sais pourquoi.
Pourrais-tu aussi me guider sur la façon dont je peux faire pour que quand j'ai tapé une lettre et qu'elle se trouve
dans le mot, il garde la lettre en mémoire...
Merci d'avance
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
mype
Messages postés
2435
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
16 août 2010
436
4 févr. 2008 à 22:41
4 févr. 2008 à 22:41
alors quand tu tapes la lettre apres avoir taper la lettre tu appuie sur entree or la touche entree correspond au caractere "\n" donc si tu ne mets pas de getchar le caractere "\n" vas etre mis dans la variable lc qui stocke des caracteres donc le getchar permet de recupere le "\n" our eviter ce petit probleme
voila j'espere que tu as compris la ;)
sinon pour ton autre probleme tu peu créé un nouveau tableau, initialiser toutes ces cases avec le symbole "*" comme ça les lettres trouvé seront stocké dans le tableau
voici ce que ça donne:
voila j'espere que tu as compris la ;)
sinon pour ton autre probleme tu peu créé un nouveau tableau, initialiser toutes ces cases avec le symbole "*" comme ça les lettres trouvé seront stocké dans le tableau
voici ce que ça donne:
#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int nbessai=10; int choix, i; char mot[5]; char lc; int pendu[5]={0}; char mot_a_trouve[6]; 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======="); 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; } for(i=0;i<6;i++) printf("%c",mot_a_trouve[i]); } break; } } while(choix!=0); system("PAUSE"); return 0; }
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 841
4 févr. 2008 à 22:54
4 févr. 2008 à 22:54
mype, getchar() n'est pas conseillé car pas du tout portable.
attention scanf("%s",mot); Il ne faut pas mettre &mot.
Voici le code modifié :
limbergh, normalement à partir de ça, tu devrais t'en sortir. Attention quand même à la lisibilité de ton code. La création de fonction n'est pas négligeable, car là limite illisible ;)
attention scanf("%s",mot); Il ne faut pas mettre &mot.
Voici le code modifié :
#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int nbessai=10; int choix; char motSecret[5]; char ls[3]; char lc; int i; char pendu[5]; 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); switch(choix) { case 1 : printf("introduisez un mot de 4 caracteres : "); strcpy(pendu,"****\0"); scanf("%s",motSecret); printf("pendu=%s\n",pendu); printf("motSecret=%s\n",motSecret); break; case 2 : printf("\n\nle mot choisi est : %s" , motSecret); break; case 3 : printf("\n =====LE PENDU======="); nbessai=10+1; while(nbessai-->0 && strcmp(motSecret,pendu)){ printf("\n il vous reste %d coups a jouer", nbessai); printf("\n introduisez une lettre : "); fgets(ls,3,stdin); lc=ls[0]; for (i=0;i<5;i++) if(motSecret[i]==lc) pendu[i]=lc; printf("%s",pendu); } break; } } while(choix!=0); system("PAUSE"); return 0; }
limbergh, normalement à partir de ça, tu devrais t'en sortir. Attention quand même à la lisibilité de ton code. La création de fonction n'est pas négligeable, car là limite illisible ;)
mype
Messages postés
2435
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
16 août 2010
436
4 févr. 2008 à 22:59
4 févr. 2008 à 22:59
pourquoi tu dis que le getchar() n'est pas portable ?
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 841
4 févr. 2008 à 23:12
4 févr. 2008 à 23:12
Je me suis mal exprimé.
Le problème du \n stocké dans le buffer dépend de l'OS. Et donc ta solution avec getchar() marchera sur les systèmes avec l'erreur mais demandera à l'utilisateur de revalider entrée une fois pour les autres systèmes.
Je pense que la solution char tmp[3] et fgets, 3= caractère + \n + \0 reste la meilleure.
Le problème du \n stocké dans le buffer dépend de l'OS. Et donc ta solution avec getchar() marchera sur les systèmes avec l'erreur mais demandera à l'utilisateur de revalider entrée une fois pour les autres systèmes.
Je pense que la solution char tmp[3] et fgets, 3= caractère + \n + \0 reste la meilleure.
mype
Messages postés
2435
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
16 août 2010
436
4 févr. 2008 à 23:18
4 févr. 2008 à 23:18
ok merci pour la précision
limbergh
Messages postés
658
Date d'inscription
dimanche 8 juillet 2007
Statut
Membre
Dernière intervention
29 juin 2010
140
5 févr. 2008 à 11:39
5 févr. 2008 à 11:39
merci pour vos precisions, elles m'ont vraiment aidé...