"programme.exe" a céssé de fonctionné

Résolu/Fermé
Utilisateur anonyme - 6 févr. 2010 à 21:28
 maouhoubsmine - 14 avril 2010 à 03:15
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

DrCrow Messages postés 387 Date d'inscription lundi 9 novembre 2009 Statut Membre Dernière intervention 20 août 2014 19
6 févr. 2010 à 23:02
t'as oublié le symbole & pour la fonction scanf ^^
scanf("%s", &prenomun);
scanf("%s", &prenomun);
scanf("%s", &prenomdeux);
0
Utilisateur anonyme
6 févr. 2010 à 23:43
nan c'est toujours pas sa
0
maouhoubsmine
14 avril 2010 à 03:15
svp j'ai la meme probleme !!!!!!!!!!!!!????????????
merci d'avance
0