Des erreurs...

Fermé
Koda94 Messages postés 7 Date d'inscription samedi 9 mai 2015 Statut Membre Dernière intervention 25 mai 2015 - 25 mai 2015 à 10:55
Koda94 Messages postés 7 Date d'inscription samedi 9 mai 2015 Statut Membre Dernière intervention 25 mai 2015 - 25 mai 2015 à 15:03
Bonjour,

J'ai réalisé un jeu de Pendu 1 ou 2 joueurs avec un menu. Mais j'ai des erreurs qui m'empêchent de le faire fonctionner. J'ai besoin d'aide !

PS : J'ai mis en gras les lignes incriminées



Merci

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include "dictionnaire.h"
#define VRAI 1
#define FAUX 0
#define NBC 30



int affichageMenu(void)
{
int choixMenu;

printf("********Bonjour, Bienvenue dans Pendu 2.0 !********\n\n");
printf("Avant tout, souhaitez-vous faire une partie:\n\n");
printf("En solitaire, Tapez 1\n");
printf("A deux Joueurs, Tapez 2\n\n");
printf("\nVotre choix?\n\n");
scanf("%d", &choixMenu);
return choixMenu;
}
int main(void)
{
switch (affichageMenu())
{
case 1:
int main (void); a label can only be part of a statement
and a declaration is not a statement
{
int nb_lettres;
char mot [NBC];
char masque [NBC];
char lettre ;
int nbcoups,j;
int trouve;

printf("Entrez un mot : ");
scanf("%s", mot);

nb_lettres = strlen(mot);

j = 0;
while (j < nb_lettres)
{
masque[j] = '*';
j++;
}
masque[j] = '\0';
system("cls");
printf("%s", masque);
trouve = FAUX;
nbcoups = 0;
while ((nbcoups < 10) && !trouve){
printf ("\ncaractere ? ");
scanf (" %c", &lettre);
j = 0;
while ((j < nb_lettres) && !trouve) {
if (mot[j] == lettre) {
masque[j]=lettre;
if (strchr(masque,'*') == NULL)
trouve = VRAI;
}
j++;
}
printf("%s", masque);
nbcoups++;
}
if (!trouve)
printf("\nVOUS AVEZ PERDU\n");
else
printf("\nVOUS AVEZ GAGNE\n");
return 0
} expected ; before '}' token error
break;

case 2:
int choisirMot(char *mot)
{ expected ; before '}' token error
FILE* dictionnaire = NULL;
int nbMot = 0, numMotChoisi = 0, i = 0;
int nblettre = 0;
dictionnaire = fopen("dictionnaire.txt", "r");
if (dictionnaire == NULL)
{
printf("\nL'ouverture du dictionnaire a echouee");
return 0;
}

do
{
nblettre = fgetc(dictionnaire);
if (nblettre == '\n')
nbMot++;
} while(nblettre != EOF);



int nombreAleatoire(int nombreMax)
{
srand(time(NULL));
return (rand() % nombreMax);
}

numMotChoisi = nombreAleatoire(nbMot);

rewind(dictionnaire);
while (numMotChoisi > 0)
{
nblettre = fgetc(dictionnaire);
if (nblettre == '\n')
numMotChoisi--;
}

fgets(mot, 100, dictionnaire);
mot[strlen(mot) - 1] = '\0';

fclose(dictionnaire);

return 1;
}



int gagner(int lettreTrouvee[], long longueurMot);
int rechercheLettre(char lettre, char motATrouver[], int lettreDecouverte[]);
char lireCaractere();

int main(int argc, char* argv[])
{
char lettre = 0;
char motATrouver[100] = {0};
int *lettreDecouverte = NULL;
long coupsRestants = 10;
long i = 0;
long longueurMot = 0;

printf("Bienvenue dans le Pendu !\n\n");

if (!choisirMot(motATrouver))
exit(0);

longueurMot = strlen(motATrouver);

lettreDecouverte = malloc(longueurMot * sizeof(int));
if (lettreDecouverte == NULL)
exit(0);

for (i = 0 ; i < longueurMot ; i++)
lettreDecouverte[i] = 0;


while (coupsRestants > 0 && !gagne(lettreDecouverte, longueurMot))
{
printf("\n\nIl vous reste %ld coups a jouer", coupsRestants);
printf("\nQuel est le mot secret ? ");


for (i = 0 ; i < longueurMot ; i++)
{
if (lettreDecouverte[i])
printf("%c", motATrouver[i]);
else
printf("*");
}



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

if (!rechercheLettre(lettre, motATrouver, lettreDecouverte))
{
coupsRestants--;
}
}

if (gagne(lettreDecouverte, longueurMot))
printf("\n\nGagne ! Le mot secret etait bien : %s", motATrouver);
else
printf("\n\nPerdu ! Le mot secret etait : %s", motATrouver);

free(lettreDecouverte);

return 0;
}

char lireCaractere()
{
char caractere = 0;

caractere = getchar();
caractere = toupper(caractere);


while (getchar() != '\n') ;

return caractere;
}

int gagne(int lettreDecouverte[], long longueurMot)
{
long i = 0;
int joueurGagne = 1;

for (i = 0 ; i < longueurMot ; i++)
{
if (lettreDecouverte[i] == 0)
joueurGagne = 0;
}

return joueurGagne;
}

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


for (i = 0 ; motATrouver[i] != '\0' ; i++)
{
if (lettre == motATrouver[i])
{
bonneLettre = 1;
lettreDecouverte[i] = 1;
}
}

return bonneLettre;
}
break;

default:
printf("Vous ne ferez rien du tout!");
break;
}

system("PAUSE");
return 0;
}

2 réponses

ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 228
25 mai 2015 à 13:56
'lut, tout simplement on ne peut pas définir de fonction dans une autre en C. il faut que tu les déplaces hors du main, et que tu les appelles dans ton switch.
Et il ne doit y avoir qu'un seul main d'ailleurs; je ne sais pas ce qui t'as mené à en mettre comme ça...
0
Koda94 Messages postés 7 Date d'inscription samedi 9 mai 2015 Statut Membre Dernière intervention 25 mai 2015
25 mai 2015 à 14:38
Salut !

Merci pour ta réponse. J'ai compris ce que tu m'as dit. Mais faut-il que je les définissent avant le menu ? Et surtout comment ?
0
Koda94 Messages postés 7 Date d'inscription samedi 9 mai 2015 Statut Membre Dernière intervention 25 mai 2015
25 mai 2015 à 15:03
Je l'ai bidouillé un petit peu mais il me reste 2 erreurs : static declaration follows non-static declaration.
Pourquoi ?


#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include "dictionnaire.h"
#define VRAI 1
#define FAUX 0
#define NBC 30

int affichageMenu(void)
{
int choixMenu;

printf("********Bonjour, Bienvenue dans Pendu 2.0 !********\n\n");
printf("Avant tout, souhaitez-vous faire une partie:\n\n");
printf("En solitaire, Tapez 1\n");
printf("A deux Joueurs, Tapez 2\n\n");
printf("\nVotre choix?\n\n");
scanf("%d", &choixMenu);
return choixMenu;
}
int main(void)
{
switch (affichageMenu())
{
case 1:
{


int nb_lettres;
char mot [NBC];
char masque [NBC];
char lettre ;
int nbcoups,j;
int trouve;

printf("Entrez un mot : ");
scanf("%s", mot);


nb_lettres = strlen(mot);

j = 0;
while (j < nb_lettres)
{
masque[j] = '*';
j++;
}

masque[j] = '\0';


system("cls");

printf("%s", masque);

trouve = FAUX;
nbcoups = 0;
while ((nbcoups < 10) && !trouve) {
printf ("\nProposez une lettre :");
scanf (" %c", &lettre);
j = 0;
while ((j < nb_lettres) && !trouve) {
if (mot[j] == lettre) {
masque[j]=lettre;
if (strchr(masque,'*') == NULL)
trouve = VRAI;
}
j++;
}
printf("%s", masque);
nbcoups++;
}
if (!trouve)
printf("\nVOUS AVEZ PERDU\n");
else
printf("\nVOUS AVEZ GAGNE\n");
return 0;
}

case 2:
{
int choisirMot(char *mot)
{
FILE* dictionnaire = NULL;
int nbMot = 0, numMotChoisi = 0, i = 0;
int nblettre = 0;
dictionnaire = fopen("dictionnaire.txt", "r");
if (dictionnaire == NULL)
{
printf("\nL'ouverture du dictionnaire a echouee");
return 0;
}

do
{
nblettre = fgetc(dictionnaire);
if (nblettre == '\n')
nbMot++;
} while(nblettre != EOF);

//On va créer ici la fonction qui choisit aléatoirement un mot

int nombreAleatoire(int nombreMax)
{
srand(time(NULL));
return (rand() % nombreMax);
}

numMotChoisi = nombreAleatoire(nbMot);

rewind(dictionnaire);
while (numMotChoisi > 0)
{
nblettre = fgetc(dictionnaire);
if (nblettre == '\n')
numMotChoisi--;
}

fgets(mot, 100, dictionnaire);
mot[strlen(mot) - 1] = '\0';

fclose(dictionnaire);

return 1;
}

// C'est ici que l'on va créer le "corps" du jeu

int gagner(int lettreTrouvee[], long longueurMot);
int rechercheLettre(char lettre, char motATrouver[], int lettreDecouverte[]);
char lireCaractere();

int second(int argc, char* argv[])
{
char lettre = 0;
char motATrouver[100] = {0};
int *lettreDecouverte = NULL;
long coupsRestants = 10;
long i = 0;
long longueurMot = 0;

printf("Bienvenue dans le Pendu !\n\n");

if (!choisirMot(motATrouver))
exit(0);

longueurMot = strlen(motATrouver);

lettreDecouverte = malloc(longueurMot * sizeof(int));
if (lettreDecouverte == NULL)
exit(0);

for (i = 0 ; i < longueurMot ; i++)
lettreDecouverte[i] = 0;


while (coupsRestants > 0 && !gagne(lettreDecouverte, longueurMot))
{
printf("\n\nIl vous reste %ld coups a jouer", coupsRestants);
printf("\nQuel est le mot secret ? ");


for (i = 0 ; i < longueurMot ; i++)
{
if (lettreDecouverte[i])
printf("%c", motATrouver[i]);
else
printf("*");
}



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


if (!rechercheLettre(lettre, motATrouver, lettreDecouverte))
{
coupsRestants--;
}
}

if (gagne(lettreDecouverte, longueurMot))
printf("\n\nGagne ! Le mot secret etait bien : %s", motATrouver);
else
printf("\n\nPerdu ! Le mot secret etait : %s", motATrouver);

free(lettreDecouverte);

return 0;
}

char lireCaractere()
{
char caractere = 0;

caractere = getchar();
caractere = toupper(caractere);


while (getchar() != '\n') ;

return caractere;
}

int gagne(int lettreDecouverte[], long longueurMot)
{
long i = 0;
int joueurGagne = 1;

for (i = 0 ; i < longueurMot ; i++)
{
if (lettreDecouverte[i] == 0)
joueurGagne = 0;
}

return joueurGagne;
}

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


for (i = 0 ; motATrouver[i] != '\0' ; i++)
{
if (lettre == motATrouver[i])
{
bonneLettre = 1;
lettreDecouverte[i] = 1;
}
}

return bonneLettre;
}

}
}
}
0