Lectur/ecriture dans un fichier: Probleme!
Résolu/Fermé
MouchT8
Messages postés
22
Date d'inscription
samedi 24 mai 2008
Statut
Membre
Dernière intervention
11 août 2008
-
29 mai 2008 à 16:56
SebDam - 5 août 2008 à 15:36
SebDam - 5 août 2008 à 15:36
A voir également:
- Lectur/ecriture dans un fichier: Probleme!
- Fichier rar - Guide
- Fichier host - Guide
- Fichier iso - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
31 réponses
mype
Messages postés
2435
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
16 août 2010
436
16 juin 2008 à 17:24
16 juin 2008 à 17:24
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); }
mype
Messages postés
2435
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
16 août 2010
436
16 juin 2008 à 17:47
16 juin 2008 à 17:47
a quelle ligne il te donne cette erreur ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
mype
Messages postés
2435
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
16 août 2010
436
16 juin 2008 à 18:21
16 juin 2008 à 18:21
et la ligne 114 c'est quel ligne ? ;)
sup_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 ^^
mype
Messages postés
2435
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
16 août 2010
436
16 juin 2008 à 18:25
16 juin 2008 à 18:25
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 !!
mype
Messages postés
2435
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
16 août 2010
436
16 juin 2008 à 19:11
16 juin 2008 à 19:11
bizarre la premiere version ça me parraissait bon je vois pas l'erreur la dsl... :(
MouchT8
Messages postés
22
Date d'inscription
samedi 24 mai 2008
Statut
Membre
Dernière intervention
11 août 2008
1
17 juin 2008 à 17:59
17 juin 2008 à 17:59
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 !
mich62120
Messages postés
631
Date d'inscription
jeudi 22 novembre 2007
Statut
Membre
Dernière intervention
21 janvier 2010
6
29 mai 2008 à 17:01
29 mai 2008 à 17:01
Slt,
Je ne suis pas sur mais je pense que tu ne dois pas déclarer les fonctions mais simplement #include <stdio.h> car elle sont dans cette bibliothèque. Si tu les remets il pense que ce sont tes fonctions et donne une erreur (tu desapprouve fopen).
Demande confirmation à un connaisseur.
Mich
Je ne suis pas sur mais je pense que tu ne dois pas déclarer les fonctions mais simplement #include <stdio.h> car elle sont dans cette bibliothèque. Si tu les remets il pense que ce sont tes fonctions et donne une erreur (tu desapprouve fopen).
Demande confirmation à un connaisseur.
Mich