"programme.exe" a céssé de fonctionné [Résolu/Fermé]

Signaler
Messages postés
221
Date d'inscription
mercredi 18 juin 2008
Statut
Membre
Dernière intervention
17 août 2020
-
 maouhoubsmine -
Bonjour,
Bonjour, je suis en train d'apprendre la programmation du language C grace au tutoriel de ce site.
j'ai réalisé le pendu, et ensuite j'y ai apporter des modification qui marche super bien.
Cependant dans la partie deux joueurs du jeu, lorsque el joueur un dois rentrez un mot et qu'il appui sur entrez, une message d'erreur de windows apparait.
Il dit :
pendu.exe à cessé de fonctionner
rechercher une solution en ligne et fermer le programme
fermer le programme

Aidez moi SVP

voici mon code source de la page main.c du pendu

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>

#include "dico.h"

int gagne(int lettreTrouvee[], long tailleMot);
int rechercheLettre(char lettre, char motSecret[], int lettreTrouvee[]);
char lireCaractere();

int main(int argc, char* argv[])
{
char lettre = 0; // Stocke la lettre proposée par l'utilisateur (retour du scanf)
char motSecret[100] = {0}; // Ce sera le mot à trouver
int *lettreTrouvee = NULL; // Un tableau de booléens. Chaque case correspond à une lettre du mot secret. 0 = lettre non trouvée, 1 = lettre trouvée
long coupsRestants = 10; // Compteur de coups restants (0 = mort)
long i = 0; // Une petite variable pour parcourir les tableaux
long tailleMot = 0;
char prenomun[50];
char prenomdeux[50];
int nombrejoueur = 0;
char motsecretdeuxjoueurs[100]; // C'est le mot à trouver que le joueur 1 aura donne

printf("Bienvenue dans le Pendu modifié par Thebestofpeter !\n\n");
printf("Entrez le nombre de joueur ( Deux joueurs maximum ) :");
scanf("%d", &nombrejoueur);

// Condition à un joueur :

if ( nombrejoueur == 1 )
{
printf("Entrez votre prenom :");
scanf("%s", prenomun);

if (!piocherMot(motSecret))
exit(0);

tailleMot = strlen(motSecret);

lettreTrouvee = malloc(tailleMot * sizeof(int)); // On alloue dynamiquement le tableau lettreTrouvee (dont on ne connaissait pas la taille au départ)
if (lettreTrouvee == NULL)
exit(0);

for (i = 0 ; i < tailleMot ; i++)
lettreTrouvee[i] = 0;



// On continue à jouer tant qu'il reste au moins un coup à jouer ou qu'on
// n'a pas gagné
while (coupsRestants > 0 && !gagne(lettreTrouvee, tailleMot))
{
printf("\n\n%s, Il vous reste %ld coups a jouer", prenomun, coupsRestants);
printf("\nQuel est le mot secret ? ");

/* On affiche le mot secret en masquant les lettres non trouvées
Exemple : *A**ON */
for (i = 0 ; i < tailleMot ; i++)
{
if (lettreTrouvee[i]) // Si on a trouvé la lettre n°i
printf("%c", motSecret[i]); // On l'affiche
else
printf("*"); // Sinon, on affiche une étoile pour les lettres non trouvées
}

printf("\nProposez une lettre : ");
lettre = lireCaractere();

// Si ce n'était PAS la bonne lettre
if (!rechercheLettre(lettre, motSecret, lettreTrouvee))
{
coupsRestants--; // On enlève un coup au joueur
}
}


if (gagne(lettreTrouvee, tailleMot))
printf("\n\nGagne ! Le mot secret etait bien : %s, Bravo %s", motSecret, prenomun);
else
printf("\n\nPerdu ! Le mot secret etait : %s, Dommage %s", motSecret, prenomun);

free(lettreTrouvee); // On libère la mémoire allouée manuellement (par malloc)


return 0;
}

// condition à deux joueurs :

else if ( nombrejoueur == 2)
{
printf("Entrez le prenom du premier joueur :");
scanf("%s", prenomun);
printf("\nEntrez le prenom du deuxieme joueur :");
scanf("%s", prenomdeux);

printf("\n\n%s, Entrez le mot que devra trouver %s A l'abri du regard de ce dernier :", prenomun, prenomdeux);
scanf("%s", motsecretdeuxjoueurs);

tailleMot = strlen(motsecretdeuxjoueurs);

while (coupsRestants > 0 && !gagne(lettreTrouvee, tailleMot))
{
printf("\n\n%s, Il vous reste %d coups a jouer", prenomun, coupsRestants);
printf("\nQuel est le mot secret ? ");

/* On affiche le mot secret en masquant les lettres non trouvées
Exemple : *A**ON */
for (i = 0 ; i < 6 ; i++)
{
if (lettreTrouvee[i]) // Si on a trouvé la lettre n°i
printf("%c", motsecretdeuxjoueurs[i]); // On l'affiche
else
printf("*"); // Sinon, on affiche une étoile pour les lettres non trouvées
}

printf("\n%d, Proposez une lettre : ", prenomdeux);
lettre = lireCaractere();

// Si ce n'était PAS la bonne lettre
if (!rechercheLettre(lettre, motsecretdeuxjoueurs, lettreTrouvee))
{
coupsRestants--; // On enlève un coup au joueur
}
}


if (gagne(lettreTrouvee, tailleMot))
printf("\n\nBravo %s, Vous avez Gagné ! Le mot secret etait bien : %s", motsecretdeuxjoueurs);
else
printf("\n\nDommage %s, Vous avez Perdu ! Le mot secret etait : %s", motsecretdeuxjoueurs);

return 0;
return 0;
}
}

// LES FONCTIONS

char lireCaractere()
{
char caractere = 0;

caractere = getchar(); // On lit le premier caractère
caractere = toupper(caractere); // On met la lettre en majuscule si elle ne l'est pas déjà

// On lit les autres caractères mémorisés un à un jusqu'à l'\n
while (getchar() != '\n') ;

return caractere; // On retourne le premier caractère qu'on a lu
}


int gagne(int lettreTrouvee[], long tailleMot)
{
long i = 0;
int joueurGagne = 1;

for (i = 0 ; i < tailleMot ; i++)
{
if (lettreTrouvee[i] == 0)
joueurGagne = 0;
}

return joueurGagne;
}

int rechercheLettre(char lettre, char motSecret[], int lettreTrouvee[])
{
long i = 0;
int bonneLettre = 0;

// On parcourt motSecret pour vérifier si la lettre proposée y est
for (i = 0 ; motSecret[i] != '\0' ; i++)
{
if (lettre == motSecret[i]) // Si la lettre y est
{
bonneLettre = 1; // On mémorise que c'était une bonne lettre
lettreTrouvee[i] = 1; // On met à 1 le case du tableau de booléens correspondant à la lettre actuelle
}
}

return bonneLettre;
}

3 réponses

Messages postés
387
Date d'inscription
lundi 9 novembre 2009
Statut
Membre
Dernière intervention
20 août 2014
18
t'as oublié le symbole & pour la fonction scanf ^^
scanf("%s", &prenomun);
scanf("%s", &prenomun);
scanf("%s", &prenomdeux);
Messages postés
221
Date d'inscription
mercredi 18 juin 2008
Statut
Membre
Dernière intervention
17 août 2020
1
nan c'est toujours pas sa

svp j'ai la meme probleme !!!!!!!!!!!!!????????????
merci d'avance