Problème Code::Blocks 10.05 : C
Résolu
lancelotbb
Messages postés
40
Date d'inscription
Statut
Membre
Dernière intervention
-
lancelotbb Messages postés 40 Date d'inscription Statut Membre Dernière intervention -
lancelotbb Messages postés 40 Date d'inscription Statut Membre Dernière intervention -
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 :
Fichier dico.c :
Fichier dico.h :
Merci d'avance de vos réponses.
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:
- Problème Code::Blocks 10.05 : C
- Code ascii - Guide
- Code puk bloqué - Guide
- Code activation windows 10 - Guide
- Comment déverrouiller un téléphone quand on a oublié le code - Guide
- Code blocks - Télécharger - Langages
2 réponses
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.
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.
Merci beaucoup !