J'ai commencé le tp pendu demandé dans le livre (ou sur le site). Je suis conscient que le programme est encore très incomplet vu que je l'ai commencé, mais mon problème vient de ces deux boucles while. En effet, dès que je fait la première saisie le programme se termine tout de suite.
PS : La ligne ma_lettre = lire_caractere() sert de saisie de caractère comme c'était expliqué dans livre.
Le message qui suit est une réponse automatique activée par un membre de l'équipe. Les réponses automatiques leur permettent d'éviter d'avoir à répéter de nombreuses fois la même chose, ce qui leur fait gagner du temps et leur permet de s'occuper des sujets qui méritent plus d'attention. Nous sommes néanmoins ouverts et si vous avez une question ou une remarque, n'hésitez pas à contacter la personne en question par Message Privé. Pour plus d'informations, nous vous invitons à lire les règles générales du forum
Merci de colorer votre code à l'aide du bouton Code
Les forums d'Openclassrooms disposent d'une fonctionnalité permettant de colorer et mettre en forme les codes source afin de les rendre plus lisibles et faciles à manipuler par les intervenants. Pour cela, il faut utiliser le bouton de l'éditeur, choisir un des langages proposés et coller votre code dans la zone prévue. Si vous utilisez l'éditeur de messages en mode Markdown, il faut utiliser les balises <pre class="brush: cpp;">Votre code ici</pre>.
Merci de modifier votre message d'origine en fonction.
Hé ho, on te demande de poster convenablement ton code !
- Edité par edgarjacobs il y a 33 minutes
désolé j'avais mal compris le fait qu'on ne pouvais pas poster d'image
#include <stdio.h>
#include <stdlib.h>
#include "saisie_caractere.h"
#include <string.h>
void jeu_pendu()
{
int a=9,nombre_occurence=1,position,*nombre_de_caractere_requis=NULL,iterateur;
char mot_secret[]="AMALGAME";
char ma_lettre, *tab= NULL;
char *booleen=NULL, *booleen_deux=NULL;
int len = strlen(mot_secret);
nombre_de_caractere_requis = malloc((len+1)*sizeof(char));//on alloue de la mémoire pour le mot de test
for(iterateur=0;tab[iterateur]!='/0';iterateur++) {tab[iterateur]='_';}//on remplace la chaîne tab par des _
printf("Quel est le mot secret ? Entrez une lettre ");
ma_lettre = lire_caractere();
booleen = strchr(mot_secret,ma_lettre);
while(a!=0)
{
while ((booleen==NULL)&&(a!=0))
{
printf("la lettre que vous avez mis ne se trouve pas dans le mot secret il vous reste %d essais %s ",a,tab);
ma_lettre = lire_caractere();
booleen = strchr(mot_secret,ma_lettre);
a--;
}
while((booleen!=NULL)&&(a!=0))
{
booleen = strchr((booleen + 1),ma_lettre);//on recherche la seconde occurence du caractère pour voir si il y en a deux
booleen_deux = (char *) memchr(mot_secret,ma_lettre,strlen(mot_secret));
while(booleen!=NULL)
{
booleen = strchr((booleen+1),ma_lettre);
nombre_occurence++;
}
printf("bravo vous avez reussi a trouver une lettre a la position %d il est de %d occurence! il vous reste %d essais %s ",booleen_deux-mot_secret+1,nombre_occurence,a,tab);
ma_lettre = lire_caractere();
nombre_occurence=1;
booleen = strchr(mot_secret,ma_lettre);
a--;
}
}
if(a==0) {printf("desole vous avez perdu la partie \n");}
free (nombre_de_caractere_requis);
en plus, comme robun l'a dis plus tôt, à la ligne 16 tu utilise = au lieu de ==. Si tu ne corrige pas cela, tu vas te retrouver avec une boucle infinie et booleen qui vaudras toujours NULL !
La gentillesse est le langage qu'un sourd peut entendre et qu'un aveugle peut voir.
Il n'y a qu'un seul monde et il est faux, cruel, contradictoire, séduisant et dépourvu de sens. Un monde ainsi constitué est le monde réel. Nous avons besoin de mensonges pour conquérir cette réalité, cette "vérité".
je n'ai pas compris ta question. Est-ce que tu parles du type ? si c'est ça alors c'est un pointeur int que j'ai déclaré dans la prémière ligne avec initialisation NULL.
Durza 42 a écrit:
en plus, comme robun l'a dis plus tôt, à la ligne 16 tu utilise = au lieu de ==. Si tu ne corrige pas cela, tu vas te retrouver avec une boucle infinie et booleen qui vaudras toujours NULL !
J'ai corrigé ce problème dans les boucles while. Cette ligne sert à affecter au pointeur booleen la fonction strchr pour rechercher dans la chaîne le caractère saisie
- Edité par RachidBaridi 29 novembre 2020 à 18:06:01
je n'ai pas compris ta question. Est-ce que tu parles du type ? si c'est ça alors c'est un pointeur int que j'ai déclaré dans la prémière ligne avec initialisation NULL.
Tu assignes le retour de malloc() à cette variable, mais tu n'utilises jamais cette variable (à part pour pour le free()). Donc je me demande à quoi elle sert. Supprime-là de ton programme, ça ne changera rien.
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
C'est plutôt le pointeur tab qu'il faudrait initialisé avec un bloc mémoire valide !
PS : Aère ton code, tu y verras plus clair !
- Edité par rouloude 29 novembre 2020 à 18:21:43
Tp pendu
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
La gentillesse est le langage qu'un sourd peut entendre et qu'un aveugle peut voir.
Il n'y a qu'un seul monde et il est faux, cruel, contradictoire, séduisant et dépourvu de sens. Un monde ainsi constitué est le monde réel. Nous avons besoin de mensonges pour conquérir cette réalité, cette "vérité".
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent