Lectur/ecriture dans un fichier: Probleme!
Résolu
MouchT8
Messages postés
22
Date d'inscription
Statut
Membre
Dernière intervention
-
SebDam -
SebDam -
Bonjour,
VOILA! je ne sais pas par ou commencer tellement j'ai de probemes dans mon programme.
C'est la premiere fois dans mes devoirs que je travail là dessus.
Je vais commencer par mon probleme principale.
Voila je dois ouvrir un fichier en lecture,
donc avec fopen,
Mais VS me rend dingue..
j'ai:
Le probleme le voila...
VS me note: " warning C4273: 'fopen' : liaison DLL incohérente" et "warning C4273: 'fclose' : liaison DLL incohérente"
au niveau ce ces 2 lignes :
FILE * f;
FILE *fopen(const char *path,const char *mode);
Pour ce qui est du moment ou j'ouvre dico.dat,
Il me met:
"warning C4996: 'fopen' a été déclaré désapprouvé" et me dit de mettre a la place de fopen, "fopen_s"
seulement si je met fopen_s,il me note ensuite que la fonction ne prend pas 2 arguments -_-
Quelqu'un peut m'aider? si c'est assez clair dans mes explications bien sur :s
VOILA! je ne sais pas par ou commencer tellement j'ai de probemes dans mon programme.
C'est la premiere fois dans mes devoirs que je travail là dessus.
Je vais commencer par mon probleme principale.
Voila je dois ouvrir un fichier en lecture,
donc avec fopen,
Mais VS me rend dingue..
j'ai:
//FONCTION PRINCIPALE main() FILE * f; FILE *fopen(const char *path,const char *mode); int fclose (FILE *stream); int main(void) { char mot_texte[LONGMOT]; //mot lu dans le fichier texte char dico[MAXMOTS][LONGMOT]; char *pmot; char **argv; //valeur des arguments int argc; //nombre d'argument int strcmp (const char *s1, const char *s2); void qsort (void *base, size_t nmemb, size_t size,int (*compar)(const void *, const void *)); int i,j,k; char mot[100]; short nb_mots; printf("Veuillez entrer le nom du fichier texte a traiter pour la recherche dichotomique svp: "); fscanf_s(f,"%s",&argv); f=fopen("dico.dat","r"); [...]
Le probleme le voila...
VS me note: " warning C4273: 'fopen' : liaison DLL incohérente" et "warning C4273: 'fclose' : liaison DLL incohérente"
au niveau ce ces 2 lignes :
FILE * f;
FILE *fopen(const char *path,const char *mode);
Pour ce qui est du moment ou j'ouvre dico.dat,
Il me met:
"warning C4996: 'fopen' a été déclaré désapprouvé" et me dit de mettre a la place de fopen, "fopen_s"
seulement si je met fopen_s,il me note ensuite que la fonction ne prend pas 2 arguments -_-
Quelqu'un peut m'aider? si c'est assez clair dans mes explications bien sur :s
A voir également:
- Lectur/ecriture dans un fichier: Probleme!
- Fichier bin - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier rar - Guide
- Fichier .dat - Guide
31 réponses
tu te trompe normalement on definit les fonction a l'exterieur du main c'est seulement leur appel qui est ds le main donc faut que tu sorte tes fonctions du main et dans ta boucle for tu mets les appels a ces deux fonctions
sup_ponc(mot_texte); sup_maj(mot_texte);ensuite pour la deuxieme erreur ton appel a dichotomie n'est pas bon ça serait pluto
dichotomie(dico,mot,nb_mots);
oui voila j'ai résolu le probleme toute seule avant de recevoir la réponse ici ^^
Mais il me reste juste 1 erreur:
Erreur 1 error C2664: 'dichotomie' : impossible de convertir le paramètre 1 de 'char [100][20]' en 'char
Mon code ressemble à ça maintenant:
Mais il me reste juste 1 erreur:
Erreur 1 error C2664: 'dichotomie' : impossible de convertir le paramètre 1 de 'char [100][20]' en 'char
Mon code ressemble à ça maintenant:
#include<stdio.h> #include<string.h> #include<ctype.h> #include<stdlib.h> #define MAXMOTS 100 //nombre maximum de mots dans le dictionnaire #define LONGMOT 20 //longueur en carcatere d'un mot //initialisation de la fonction de recherche dichotomique short dichotomie(char **dico,char *mot,short nb_mots){ int i,j,k,trouve,indice; //i->debut, j->fin int strcmp (const char *s1, const char *s2); i=0; j=nb_mots; trouve=0; while(i<=j && trouve == 0) { int moy; //moyenne de(i,j) moy=(i+j)/2; k=moy; if(strcmp(dico[k],mot)==0) { trouve=1; } if(strcmp(dico[k],mot)>0) { j=k-1;} else{ i=k+1; } } if(trouve==0){indice=0;} //si mot n'a pas été trouvé if(trouve==1){indice=1;} //si mot a été trouvé return indice; } //initialisation des fonction de supression des majuscules et de la ponctuation void sup_ponc(char *pmot){ int i=0,j=0; char c; //Traitement while (pmot[i]!=NULL){ c=pmot[i]; if (isalpha(c)){ pmot[j]=c; j++; } i++; } pmot[j]=0; } void sup_maj(char *pmot){ int i=0; char c; //Traitement while (pmot[i]!=NULL){ c=pmot[i]; if (isupper(c)) c=tolower(c); pmot[i]=c; i++; } pmot[i]=0; } //FONCTION PRINCIPALE main() int main (int argc, char **argv) { FILE * f; char mot_texte[LONGMOT]; //mot lu dans le fichier texte char dico[MAXMOTS][LONGMOT]; char *pmot; char *fichier_texte; //nom du fichier à ouvrir et traiter void qsort (void *base, size_t nmemb, size_t size,int (*compare)(const char *, const char*)); int strcmp (const char *s1, const char *s2); int i,j,k; char mot[100]; short nb_mots; printf("Veuillez entrer le nom du fichier texte a traiter pour la recherche dichotomique svp: "); fgets (fichier_texte, sizeof fichier_texte, stdin); f=fopen("dico.dat","r"); //lecture mot par mot de tout le fichier et stockage dans un tableau en mémoire (dico) i=0; while(fgetc(f)!=EOF) { fgets(dico[i],19,f); i++; } fclose(f); //tri en mémoire du tableau dico qsort((char**)dico,nb_mots,LONGMOT,strcmp); //ouverture du fichier texte en lecture f=fopen ("argv","r"); pmot=mot; //TRAITEMENT POUR CHAQUE MOT DU TEXTE: suppression de majuscule et de ponctuation for (i=0; i<nb_mots;i++){ sup_ponc(pmot); sup_maj(pmot); } //recherche du mot dans le tableau dico à l'aide de la fonction dichotomie dichotomie(dico,mot,nb_mots); if (dichotomie==0){ char rep; //variable pourla réponse de l'utilisateur fprintf (f,"Le mot n'existe pas. Voulez vous l'ajouter au dictionnaire? \n"); fscanf(f,"%s",&rep); if (rep=='oui') { strcpy_s(dico[i],mot); //Ajout du mot dans le dico qsort ((char**) dico, nb_mots,LONGMOT, strcmp); // Tri en mémoire, une nouvelle fois, du tableau dico } } fclose(f); f=fopen("dico.dat","a"); for (i=0; i<MAXMOTS; i++) { fputs(dico[i],f); } fclose(f); }
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionsup_maj(pmot); } //recherche du mot dans le tableau dico à l'aide de la fonction dichotomie dichotomie(dico,mot,nb_mots);
iciiii !!
lol
dans le main ^^
ok c'est bizarre ton appel ma l'air bon...
dans la declaration de fonction essaye de remplacer dans les parametre char **dico par char dico[MAXMOT][LONGMOT]
dans la declaration de fonction essaye de remplacer dans les parametre char **dico par char dico[MAXMOT][LONGMOT]
eh ben figurez vous que c'est ce que j'ai fait juste avant mais là,
il m'apparait alors 3 erreurs et 5 avertissement !!! -_-
les erreurs n'indiquent aucune ligne précise et je ne comprend pas !!
Erreur 6 error LNK2019: symbole externe non résolu "void __cdecl qsort(void *,unsigned int,unsigned int,int (__cdecl*)(char const *,char const *))" (?qsort@@YAXPAXIIP6AHPBD1@Z@Z) référencé dans la fonction _main dv8.obj
Erreur 7 error LNK2019: symbole externe non résolu _WinMain@16 référencé dans la fonction ___tmainCRTStartup MSVCRTD.lib
Erreur 8 fatal error LNK1120: 2 externes non résolus C:\Documents and Settings\LaMoucheTouteCrad\Mes documents\Visual Studio 2005\Projects\devoir 8\Debug\devoir 8.exe
???????????????????
Je n'avais plus qu'une erreur et je me retrouve avec 3 maintenant !!!
et 5 avertissements pas plus explicatifs....
Avertissement 1 warning C4101: 'mot_texte' : variable locale non référencée -> ligne 95
Avertissement 2 warning C4101: 'k' : variable locale non référencée -> ligne 103
Avertissement 3 warning C4101: 'j' : variable locale non référencée -> ligne 103
Avertissement 4 warning C4700: variable locale 'fichier_texte' non initialisée utilisée -> ligne 110
Avertissement 5 warning C4700: variable locale 'nb_mots' non initialisée utilisée -> ligne 128
Mouahahahah je ne m'en sortirais dont jamais ><
Voila pourquoi je me demande si l'erreur résolue ainsi n'st pas plus complicative...
Ou si c bien par là que je dois passer pour m'en sortir !!
il m'apparait alors 3 erreurs et 5 avertissement !!! -_-
les erreurs n'indiquent aucune ligne précise et je ne comprend pas !!
Erreur 6 error LNK2019: symbole externe non résolu "void __cdecl qsort(void *,unsigned int,unsigned int,int (__cdecl*)(char const *,char const *))" (?qsort@@YAXPAXIIP6AHPBD1@Z@Z) référencé dans la fonction _main dv8.obj
Erreur 7 error LNK2019: symbole externe non résolu _WinMain@16 référencé dans la fonction ___tmainCRTStartup MSVCRTD.lib
Erreur 8 fatal error LNK1120: 2 externes non résolus C:\Documents and Settings\LaMoucheTouteCrad\Mes documents\Visual Studio 2005\Projects\devoir 8\Debug\devoir 8.exe
???????????????????
Je n'avais plus qu'une erreur et je me retrouve avec 3 maintenant !!!
et 5 avertissements pas plus explicatifs....
Avertissement 1 warning C4101: 'mot_texte' : variable locale non référencée -> ligne 95
Avertissement 2 warning C4101: 'k' : variable locale non référencée -> ligne 103
Avertissement 3 warning C4101: 'j' : variable locale non référencée -> ligne 103
Avertissement 4 warning C4700: variable locale 'fichier_texte' non initialisée utilisée -> ligne 110
Avertissement 5 warning C4700: variable locale 'nb_mots' non initialisée utilisée -> ligne 128
Mouahahahah je ne m'en sortirais dont jamais ><
Voila pourquoi je me demande si l'erreur résolue ainsi n'st pas plus complicative...
Ou si c bien par là que je dois passer pour m'en sortir !!
J'ai réglé quelques problemes.
Il ne me reste plus qjavascript:;ue 2 erreurs toutes betes a mon avis..
Voila mon code mis a jour:
Et mes erreurs :
Erreur 1 error C2664: 'qsort' : impossible de convertir le paramètre 4 de 'int (__cdecl *)(const char *,const char *)' en 'int (__cdecl *)(const void *,const void *)'
Erreur 2 error C2664: 'qsort' : impossible de convertir le paramètre 4 de 'int (__cdecl *)(const char *,const char *)' en 'int (__cdecl *)(const void *,const void *)'
J'ai donc un probleme avec mes deux fonction qsort:
ici:
et ici :
Apparement j'utilise des "const void" et je doit avoir "const char".. ou l'inverse?
c'est la premiere fois que j'utilise qsort alors je suis un peut perdu quant à son utilisation !
Il ne me reste plus qjavascript:;ue 2 erreurs toutes betes a mon avis..
Voila mon code mis a jour:
#include<stdio.h> #include<string.h> #include<ctype.h> #include<stdlib.h> #define MAXMOTS 100 //nombre maximum de mots dans le dictionnaire #define LONGMOT 20 //longueur en carcatere d'un mot //initialisation de la fonction de recherche dichotomique short dichotomie(char dico[MAXMOTS][LONGMOT],char *mot,short nb_mots){ int i,j,k,trouve,indice; //i->debut, j->fin int strcmp (const char *s1, const char *s2); i=0; j=nb_mots; trouve=0; while(i<=j && trouve == 0) { int moy; //moyenne de(i,j) moy=(i+j)/2; k=moy; if(strcmp(dico[k],mot)==0) { trouve=1; } if(strcmp(dico[k],mot)>0) { j=k-1;} else{ i=k+1; } } if(trouve==0){indice=0;} //si mot n'a pas été trouvé if(trouve==1){indice=1;} //si mot a été trouvé return indice; } //initialisation des fonction de supression des majuscules et de la ponctuation void sup_ponc(char *pmot){ int i=0,j=0; char c; //Traitement while (pmot[i]!= 0){ c=pmot[i]; if (isalpha(c)){ pmot[j]=c; j++; } i++; } pmot[j]=0; } void sup_maj(char *pmot){ int i=0; char c; //Traitement while (pmot[i]!=NULL){ c=pmot[i]; if (isupper(c)) c=tolower(c); pmot[i]=c; i++; } pmot[i]=0; } //FONCTION PRINCIPALE main() int main (int argc, char **argv) { FILE * f; char mot_texte[LONGMOT]; //mot lu dans le fichier texte char dico[MAXMOTS][LONGMOT]; char *pmot; char *fichier_texte; //nom du fichier à ouvrir et traiter int i,j,k; char mot[100]; short nb_mots; printf("Veuillez entrer le nom du fichier texte a traiter pour la recherche dichotomique svp: "); fgets (fichier_texte, sizeof fichier_texte, stdin); f=fopen("dico.dat","r"); //lecture mot par mot de tout le fichier et stockage dans un tableau en mémoire (dico) i=0; while(fgetc(f)!=EOF) { fgets(dico[i],19,f); i++; } fclose(f); //tri en mémoire du tableau dico qsort(dico,nb_mots,LONGMOT,&strcmp); //ouverture du fichier texte en lecture f=fopen ("argv","r"); pmot=mot; //TRAITEMENT POUR CHAQUE MOT DU TEXTE: suppression de majuscule et de ponctuation for (i=0; i<nb_mots;i++){ sup_ponc(pmot); sup_maj(pmot); } //recherche du mot dans le tableau dico à l'aide de la fonction dichotomie dichotomie(dico,mot,nb_mots); if (dichotomie==0){ char rep[5]; //variable pourla réponse de l'utilisateur fprintf (f,"Le mot n'existe pas. Voulez vous l'ajouter au dictionnaire? \n"); fscanf(f,"%s",&rep); if (strcmp(rep,"oui")==0) { strcpy_s(dico[i],mot); //Ajout du mot dans le dico qsort (dico, nb_mots,LONGMOT, strcmp); // Tri en mémoire, une nouvelle fois, du tableau dico } } fclose(f); f=fopen("dico.dat","a"); for (i=0; i<MAXMOTS; i++) { fputs(dico[i],f); } fclose(f); }
Et mes erreurs :
Erreur 1 error C2664: 'qsort' : impossible de convertir le paramètre 4 de 'int (__cdecl *)(const char *,const char *)' en 'int (__cdecl *)(const void *,const void *)'
Erreur 2 error C2664: 'qsort' : impossible de convertir le paramètre 4 de 'int (__cdecl *)(const char *,const char *)' en 'int (__cdecl *)(const void *,const void *)'
J'ai donc un probleme avec mes deux fonction qsort:
ici:
fclose(f); //tri en mémoire du tableau dico qsort(dico,nb_mots,LONGMOT,&strcmp); //LA !!
et ici :
if (strcmp(rep,"oui")==0) { strcpy_s(dico[i],mot); //Ajout du mot dans le dico qsort (dico, nb_mots,LONGMOT, strcmp); //LA !!
Apparement j'utilise des "const void" et je doit avoir "const char".. ou l'inverse?
c'est la premiere fois que j'utilise qsort alors je suis un peut perdu quant à son utilisation !