Problème Code::Blocks 10.05 : C

Résolu/Fermé
lancelotbb Messages postés 40 Date d'inscription lundi 17 novembre 2008 Statut Membre Dernière intervention 12 juillet 2012 - 8 août 2011 à 15:25
lancelotbb Messages postés 40 Date d'inscription lundi 17 novembre 2008 Statut Membre Dernière intervention 12 juillet 2012 - 9 août 2011 à 19:09
Bonjour, je prends actuellement des cours de C sur internet et il est demandé de créer un pendu.
Seulement j'ai une erreur que je ne comprends pas à la compilation : "error: expected declaration or statement at end of input".
J'utilise Code::Blocks 10.05.
Quelqu'un peut-il m'aider ?

Pour le code source, je met celui du cours avec les commentaires :

Fichier main.c :
#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
long coupsRestants = 10; // Compteur de coups restants (0 = mort)
long i = 0; // Une petite variable pour parcourir les tableaux
long tailleMot = 0;
printf("Bienvenue dans le Pendu !\n\n");
if (!piocherMot(motSecret))
exit(0);
tailleMot = strlen(motSecret);
lettreTrouvee = malloc(tailleMot * sizeof(int)); // On alloue dynamiquement le 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\nIl vous reste %ld coups a jouer", 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", motSecret);
else
printf("\n\nPerdu ! Le mot secret etait : %s", motSecret);
free(lettreTrouvee); // On libère la mémoire allouée manuellement (par malloc)
return 0;
}

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
while (getchar() != '\n') ; // On lit les autres caractères mémorisés un à un jusqu'à l'\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
}
return bonneLettre;
}


Fichier dico.c :
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include "dico.h"

int piocherMot(char* motPioche)
{
    FILE* dico = NULL; // Le pointeur de fichier qui va contenir notre fichier
int nombreMots = 0, numMotChoisi = 0;
int caractereLu = 0;
dico = fopen("dico.txt", "r"); // On ouvre le dictionnaire en lecture seule
// On vérifie si on a réussi à ouvrir le dictionnaire
if (dico == NULL) // Si on n'a PAS réussi à ouvrir le fichier
{
printf("\nImpossible de charger le dictionnaire de mots");
return 0; // On retourne 0 pour indiquer que la fonction a échoué
// A la lecture du return, la fonction s'arrête immédiatement.
}
// On compte le nombre de mots dans le fichier (il suffit de compter les
// entrées \n
do
{
    caractereLu = fgetc(dico);
    caractereLu = fgetc(dico);
} while(caractereLu != EOF);
numMotChoisi = nombreAleatoire(nombreMots); // On pioche un mot au hasard
// On recommence à lire le fichier depuis le début. On s'arrête lorsqu'on est arrivés rewind(dico);
while (numMotChoisi > 0)
{
caractereLu = fgetc(dico);
if (caractereLu == '\n')
numMotChoisi--;
}
/* Le curseur du fichier est positionné au bon endroit.
On n'a plus qu'à faire un fgets qui lira la ligne */
fgets(motPioche, 100, dico);
// On vire l'\n à la fin
motPioche[strlen(motPioche) - 1] = '\0';
fclose(dico);
return 1; // Tout s'est bien passé, on retourne 1
}
int nombreAleatoire(int nombreMax)
{
srand(time(NULL));
return (rand() % nombreMax);
}


Fichier dico.h :
#include <stdio.h>
#include <stdlib.h>

int piocherMot(char *motPioche);
int nombreAleatoire(int nombreMax);


Merci d'avance de vos réponses.


A voir également:

2 réponses

Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
8 août 2011 à 16:44
salut.
Normalement, les erreurs de compilations donnent un fichier et une ligne.
Il attend quelque chose à la fin. Je te conseil de vérifier qu'il ne manque pas de ';' et de vérifier les concordance entre toutes les accolades et toutes les parenthèses.
0
lancelotbb Messages postés 40 Date d'inscription lundi 17 novembre 2008 Statut Membre Dernière intervention 12 juillet 2012 1
9 août 2011 à 19:07
Salut ! Merci à toi, j'ai réussi. Je n'ai pas trouver l'erreur mais en bidouillant, j'ai réussi.

Merci beaucoup !
0
lancelotbb Messages postés 40 Date d'inscription lundi 17 novembre 2008 Statut Membre Dernière intervention 12 juillet 2012 1
Modifié par lancelotbb le 9/08/2011 à 19:09
Re-Bonjour à tous !
Je voudrais juste demander :

J'ai créer mon pendu et la compilation marche mais quand je lance le fichier dans bin/Debug, le programme s'arrête en plein milieu. Comment je peux faire ?

Merci d'avance de vos réponses
0