Erreur dans fonction introuvable
anthony
-
anthony -
anthony -
Bonjour,
voila mon code
fichier: fonction.c
fichier: mainc
et voila ce qu'il me mette come erreur dans le fichier fonction.c
voila mon code
fichier: fonction.c
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include "prototype.h"
#define TAILLEMAX 1000
char lireCaractere()
{
char caractere = 0;
caractere = getchar(); //On lit caractere 1 a 1 de la chaine tapez au clavier grace a la fonction getchar()
caractere = toupper(caractere); //On met la lettre on majuscule si elle ne l'est pas
//On lit les caracteres 1 a 1 jusqua tomber sur l' \n (pourles éffacer)
while(getchar() != '\n');
return caractere;
}
void ecritureFichier(FILE* dictionnaire)
{
dictionnaire = fopen("/home/user/pendu/motPendu.tkt","w");
if(dictionnaire != NULL)
{
fputs("PENDU \nBIGBOSS \nSUPER \nBERK \n", dictionnaire);
fclose(dictionnaire);
}
else
{
printf("Impossible d'ouvrire le fichier text\n");
}
}
void lireFichier(FILE* dictionnaire, char* chaine)
{
char chaine[] = "";
int i = 0;
dictionnaire = fopen("/home/user/pendu/motPendu.tkt", "r");
if(dictionnaire != NULL)
{
while(fgets(chaine, TAILLEMAX, dictionnaire) != NULL)
{
i++;
}
printf("il y a %d mots\n", i);
fclose(dictionnaire);
}
else
{
printf("Votre fichier n'a pas put s'ouvrire\n");
}
}
fichier: mainc
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "prototype.h"
int main()
{
char motSecret[] = "", *lettreBonne = NULL; // Tableau pour stocker le mot
char lettre = 0; // variable de type char qui sert a reconvertir le nbre stocker en lettre
int nbreCoups = 10, i = 0, nbreLettre = 0; //le nombre de coups qui reste a l'utilisateur et une variable pour une boucle
FILE* dictionnaire = NULL;
ecritureFichier(dictionnaire);
lireFichier(dictionnaire, motSecret);
rewind(dictionnaire);
nbreLettre = strlen(motSecret);
lettreBonne = malloc((nbreLettre + 1) * sizeof(char));
for ( i = 0; i < nbreLettre; i++) // On rempli ton tableau avec des *
{
lettreBonne[i] = '*';
}
printf("Bienvenue Dans le pendu\n\n\n"); // on affiche la bienvenue
/*
On fait une boucle tant que nombre de coups
est superieur a 0 alors elle affiche le contenue ...
*/
while(nbreCoups > 0 && strcmp(lettreBonne, motSecret) != 0)
{
printf("il vous reste %d coups\n\n", nbreCoups);
printf("Quel est le mot secret?");
for(i = 0; i < strlen(motSecret); i++) // une boucle pour afficher les *****
{
if(motSecret[i] == lettre) // si lettre elle existe alors affiche la
{
lettreBonne[i] = lettre;// On stocke la lettre dans un tableau si c'est la bonne
}
}
printf("%s", lettreBonne);
printf("\nProposer une lettre \n");
lettre = lireCaractere(); // On stocke le caractere returner dans lettre
if(strchr(motSecret, lettre) == NULL)
{
nbreCoups--;
}
}
if(strcmp(motSecret, lettreBonne) == 0)
{
printf("BRAVO !!!! vous venez de trouver le mot secret\n");
}
else
{
printf("Vous avez perdu le mot se cret était %s\n", motSecret);
}
free(lettreBonne);
return 0;
}
et voila ce qu'il me mette come erreur dans le fichier fonction.c
/home/user/pendu/fonction.c||In function ‘lireFichier’:| /home/user/pendu/fonction.c|38|erreur: ‘chaine’ redeclared as different kind of symbol| /home/user/pendu/fonction.c|36|erreur: previous definition of ‘chaine’ was here| ||=== Build finished: 2 errors, 0 warnings ===|
A voir également:
- Erreur dans fonction introuvable
- Fonction si et - Guide
- Iptv erreur de lecture - Forum TV & Vidéo
- Dans la table des matières du document à télécharger, le chapitre 6 et ses 2 sections n'apparaissent pas. trouvez l'erreur dans la structure du document et corrigez-la. mettez à jour la table des matières. quel est le mot formé par les lettres en majuscules de la table des matières après sa mise à jour ? - Forum Word
- Erreur upes 1025 - Forum Téléviseurs
- Erreur t32 ✓ - Forum Livebox
6 réponses
Le compilateur est très clair: il y a de la redéfinition dans l'air, à savoir:
- void lireFichier(FILE* dictionnaire, char* chaine)
- char chaine[] = "";
Quand tu utiliseras 'chaine', il ne saura pas s'il faut prendre celui passé en paramètre où celui déclaré dans la fonction, d'où ses interrogations.
Bonne continuation.
- void lireFichier(FILE* dictionnaire, char* chaine)
- char chaine[] = "";
Quand tu utiliseras 'chaine', il ne saura pas s'il faut prendre celui passé en paramètre où celui déclaré dans la fonction, d'où ses interrogations.
Bonne continuation.
control reaches end of non-void function
En clair, il s'agit d'une fonction 'non-void' (en l'occurence une fonction 'int'), dont on a oublié de retourner une valeur.
Bonne continuation.
En clair, il s'agit d'une fonction 'non-void' (en l'occurence une fonction 'int'), dont on a oublié de retourner une valeur.
Bonne continuation.
met pourquoi mettre void puisque je retourn la variable i est du type int donc la sortie de la fonction doit etre int
donc si j'ai compris ce que tu ma dit c'est le copilateur qui m'indique que j'ai une erreur alors que en faite il y en a pas puisuq ema fonction est non-void
int motAleatoir(char* motSecret, int MAX)
{
int motMystere = 0;
srand(time(NULL));
motMystere = (rand() % (MAX - 1 + 1)) + 1;
}
la il me mette 2 erreur dans cette fonction:
/home/user/pendu/fonction.c||In function ‘motAleatoir’:| /home/user/pendu/fonction.c|62|attention : implicit declaration of function ‘time’| /home/user/pendu/fonction.c|64|attention : control reaches end of non-void function| ||=== Build finished: 2 errors, 0 warnings ===|
bon al 2 eme je sais d'ou sa vient et c'est surtout la 1ere erreur d'ou je ne comprend pas d'ailleur je ne comprend pas la fonction je sais juste a quoi elle sert
Tu as compris.
Un détail, malgré tout: Même si tu oublies de mettre un 'return', la compilation se fait quand même (note que le compilateur te signale 'attention' et non 'erreur') et le programme pourra donc être exécuté. A la sortie de ta fonction, une valeur ne sera donc pas toujours retournée, mais l'appellant considère qu'une valeur est toujours retournée et il va donc en lire une... qui sera absolument n'importe quoi. C'est la raison pour laquelle, il faut, à moins d'être certain de ce que l'on fait, toujours traiter toutes les remarques du compilateur.
D'autre part:
return i;
fclose(dictionnaire);
Une fois retourné à l'appellant, le programme ne se poursuit plus dans ta fonction; en conséquence, 'fclose' ne sera jamais exécuté.
Bonne continuation.
Un détail, malgré tout: Même si tu oublies de mettre un 'return', la compilation se fait quand même (note que le compilateur te signale 'attention' et non 'erreur') et le programme pourra donc être exécuté. A la sortie de ta fonction, une valeur ne sera donc pas toujours retournée, mais l'appellant considère qu'une valeur est toujours retournée et il va donc en lire une... qui sera absolument n'importe quoi. C'est la raison pour laquelle, il faut, à moins d'être certain de ce que l'on fait, toujours traiter toutes les remarques du compilateur.
D'autre part:
return i;
fclose(dictionnaire);
Une fois retourné à l'appellant, le programme ne se poursuit plus dans ta fonction; en conséquence, 'fclose' ne sera jamais exécuté.
Bonne continuation.
implicit declaration of function ‘time’
En clair, le compilateur ne sait pas d'où sort cette fonction; il ne sait donc pas ce que retourne cette fonction, est-ce un pointeur, un entier, un float... il ne sait donc pas comment traiter cette valeur (devant cette déclaration implicite, il va, par défaut, considérer que c'est un 'int').
Il faut donc inclure le fichier qui permet de répondre à la question du compilateur. Je te laisse deviner lequel (un 'man 2 time' te donnera la réponse).
En clair, le compilateur ne sait pas d'où sort cette fonction; il ne sait donc pas ce que retourne cette fonction, est-ce un pointeur, un entier, un float... il ne sait donc pas comment traiter cette valeur (devant cette déclaration implicite, il va, par défaut, considérer que c'est un 'int').
Il faut donc inclure le fichier qui permet de répondre à la question du compilateur. Je te laisse deviner lequel (un 'man 2 time' te donnera la réponse).
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Voici quatre lignes extraites de ton code:
#define TAILLEMAX 1000 char motSecret[] = ""; motAleatoir(motSecret, MAX, dictionnaire); fgets(motSecret, TAILLEMAX, dictionnaire);Je ne te donne pas la solution mais te souhaite une bonne réflexion ;-)
désolé de cette longue absence j'étais occuper ^^
Bon voila comment je vois ma fonction
ma fonction et du type void je met en entré le tableau qui va contenir le mot secret je met MAX (la variable MAX contient le nombre de ligne) et je met le dictionnaire.
Puis après je met cette fonction
Puis je fais une boucle
cette boucle dit "tant que i est different de la variable motMystere alors continue"
donc elle va lire le dictionnaire et elle va stocker le mot dans motSecret.
donc voila moi dans cette boucle je ne vois que un seul problème c'est que tout les mot des dictionnaire vont être stocker dans motSecret
elle est la l'erreur ou c'est pas sa ??
Bon voila comment je vois ma fonction
void motAleatoir(char* motSecret, int MAX, FILE* dictionnaire)
ma fonction et du type void je met en entré le tableau qui va contenir le mot secret je met MAX (la variable MAX contient le nombre de ligne) et je met le dictionnaire.
Puis après je met cette fonction
srand(time(NULL));
motMystere = (rand() % (MAX - 1 + 1)) + 1;
elle va servir à tirer un mot de façon aléatoire.
Puis je fais une boucle
for(i = 0; i != motMystere; i++)
{
fgets(motSecret, TAILLEMAX, dictionnaire);
}
cette boucle dit "tant que i est different de la variable motMystere alors continue"
donc elle va lire le dictionnaire et elle va stocker le mot dans motSecret.
donc voila moi dans cette boucle je ne vois que un seul problème c'est que tout les mot des dictionnaire vont être stocker dans motSecret
elle est la l'erreur ou c'est pas sa ??
int lireFichier(FILE* dictionnaire, char* chaine) { int i = 0; dictionnaire = fopen("/home/user/pendu/motPendu.tkt", "r"); if(dictionnaire != NULL) { while(fgets(chaine, TAILLEMAX, dictionnaire) != NULL) { i++; } return i; fclose(dictionnaire); } else { printf("Votre fichier n'a pas put s'ouvrire\n"); } }voila ce que sa me dit comme erreur
je ne comprend pas cette erreur