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
- Comment ouvrir un fichier epub ? - Guide
- Comment réduire la taille d'un fichier - Guide
- Ouvrir un fichier .bin - Guide
- Fichier host - Guide
31 réponses
MouchT8
Messages postés
22
Date d'inscription
samedi 24 mai 2008
Statut
Membre
Dernière intervention
11 août 2008
1
29 mai 2008 à 17:19
29 mai 2008 à 17:19
eh bien oui je pensais bien qu'il ne fallais pas les déclarer..
ca resoud le probleme du "pb DLL"
mais pas le probleme de mon ouverture de fichier avec fopen qui est toujours déclaré désapprouvé et qui me dit de mettre "fopen_s" a la pace!!
seulement quand je met "fopen_s" comme il me le dit, la fonction ne prend plus 2 arguments -_-
ca resoud le probleme du "pb DLL"
mais pas le probleme de mon ouverture de fichier avec fopen qui est toujours déclaré désapprouvé et qui me dit de mettre "fopen_s" a la pace!!
seulement quand je met "fopen_s" comme il me le dit, la fonction ne prend plus 2 arguments -_-
MouchT8
Messages postés
22
Date d'inscription
samedi 24 mai 2008
Statut
Membre
Dernière intervention
11 août 2008
1
29 mai 2008 à 17:32
29 mai 2008 à 17:32
ca ne change rien.
Voici mo programme entier pour mieux comprendre peut etre si j'ai dicémné des erreurs....
Voici mo programme entier pour mieux comprendre peut etre si j'ai dicémné des erreurs....
#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,trouve,k,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; } //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 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: "); 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) for (i=0; i!= EOF; i++) { putc(mot_texte,dico); } fclose(dico.dat); //tri en mémoire du tableau dico qsort((char**)dico,nb_mots,LONGMOT,strcmp); //ouverture du fichier texte en lecture f=fopen ("argv","r"); //TRAITEMENT POUR CHAQUE MOT DU TEXTE: suppression de majuscule et de ponctuation for (i=0; i<nb_mots;i++){ void sup_ponc(char mot) { for (mot_texte==getc(argv); mot_texte!=EOF) { putc(isalpha(mot_texte),argv);} } void sup_maj (char mot) { for (mot_texte==getc(argv); mot_texte!=EOF) { putc(tolower(mot_texte),argv);} } } //recherche du mot dans le tableau dico à l'aide de la fonction dichotomie dichotomie (dico, mot, nb_mots); if (dichotomie(dico, mot, nb_mots)==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') { putc(mot,dico); //Ajout du mot dans le dico qsort ((char**) dico, nb_mots,LONGMOT, strcmp); // Tri en mémoire, une nouvelle fois, du tableau dico } } fclose("argv"); f=fopen("dico.dat","w"); for (i=0; i!= EOF; i++) { putc (mot_texte,dico.dat); } fclose(dico.dat); }
mype
Messages postés
2435
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
16 août 2010
436
29 mai 2008 à 18:25
29 mai 2008 à 18:25
tes fopen() ils sont bon mais pas tes fclose() il faut fermé le flux pas le fichier...
essaye comme ça
essaye comme ça
fclose(f);
MouchT8
Messages postés
22
Date d'inscription
samedi 24 mai 2008
Statut
Membre
Dernière intervention
11 août 2008
1
29 mai 2008 à 18:29
29 mai 2008 à 18:29
OH yeahhh !!
ça marche merci beaucoup !!!
Désolé ca avait l'air peut etre débile mais c'est la premiere fois que je travaille la dessus !! ^^
ça marche merci beaucoup !!!
Désolé ca avait l'air peut etre débile mais c'est la premiere fois que je travaille la dessus !! ^^
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
29 mai 2008 à 18:32
29 mai 2008 à 18:32
de rien...
n'oublie pas de mettre en resolu si tu n'as plus de probleme ;)
n'oublie pas de mettre en resolu si tu n'as plus de probleme ;)
MouchT8
Messages postés
22
Date d'inscription
samedi 24 mai 2008
Statut
Membre
Dernière intervention
11 août 2008
1
29 mai 2008 à 18:35
29 mai 2008 à 18:35
eh bien justement ce n'était qu'un petit probleme dans mon programme :D
UHUH!!
J'ai probleme également avec mes "fputs"
Voila:
1>.\1.cpp(80) : error C2664: 'fputs' : impossible de convertir le paramètre 2 de 'char [100][20]' en 'FILE *'
1>.\1.cpp(117) : error C2664: 'fputs' : impossible de convertir le paramètre 2 de 'char [100][20]' en 'FILE *
Et d'ailleurs "fopen" est toujours déclaré désaprouvé aussi.. 3 erreurs en moins pour mes fclose certes mais mon fopen bug toujours.. snif !!
Voila ce qui est noté:
1>.\1.cpp(75) : warning C4996: 'fopen' a été déclaré désapprouvé
1> C:\Program Files\Microsoft Visual Studio 8\VC\include\stdio.h(234) : voir la déclaration de 'fopen'
1> Message : 'This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details.'
UHUH!!
J'ai probleme également avec mes "fputs"
Voila:
1>.\1.cpp(80) : error C2664: 'fputs' : impossible de convertir le paramètre 2 de 'char [100][20]' en 'FILE *'
1>.\1.cpp(117) : error C2664: 'fputs' : impossible de convertir le paramètre 2 de 'char [100][20]' en 'FILE *
Et d'ailleurs "fopen" est toujours déclaré désaprouvé aussi.. 3 erreurs en moins pour mes fclose certes mais mon fopen bug toujours.. snif !!
Voila ce qui est noté:
1>.\1.cpp(75) : warning C4996: 'fopen' a été déclaré désapprouvé
1> C:\Program Files\Microsoft Visual Studio 8\VC\include\stdio.h(234) : voir la déclaration de 'fopen'
1> Message : 'This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details.'
mype
Messages postés
2435
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
16 août 2010
436
29 mai 2008 à 18:45
29 mai 2008 à 18:45
comment se fait il que tu ais des problemes avec tes fputs() je ne vois pas de fputs() dans ton programme...
quand tu donnes les erreurs donne nous aussi la ligne ou se situe l'erreur ça sera plus simple
quand tu donnes les erreurs donne nous aussi la ligne ou se situe l'erreur ça sera plus simple
MouchT8
Messages postés
22
Date d'inscription
samedi 24 mai 2008
Statut
Membre
Dernière intervention
11 août 2008
1
29 mai 2008 à 18:51
29 mai 2008 à 18:51
Forcement j'ai modifié... lol (je suis tete en l'air..))
Alors ici:
ici et ici:
Voila par raport au dernier post de mon programme !!
En entier ca donne donc ca maintenant:
Alors ici:
[...] //lecture mot par mot de tout le fichier et stockage dans un tableau en mémoire (dico) for (i=0; i!= EOF; i++) { fputs(mot_texte,dico); } [...]
ici et ici:
[...] if (rep=='oui') { fputs(mot,dico); //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","w"); for (i=0; i!= EOF; i++) { fputs(mot_texte,dico.dat); } [...]
Voila par raport au dernier post de mon programme !!
En entier ca donne donc ca 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; } //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) for (i=0; i!= EOF; i++) { fputs(mot_texte,dico); //ici !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! } 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"); //TRAITEMENT POUR CHAQUE MOT DU TEXTE: suppression de majuscule et de ponctuation for (i=0; i<nb_mots;i++){ void sup_ponc(char mot) { for (mot_texte==getc(argv); mot_texte!=EOF) { putc(isalpha(mot_texte),argv);} } void sup_maj (char mot) { for (mot_texte==getc(argv); mot_texte!=EOF) { putc(tolower(mot_texte),argv);} } } //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') { fputs(mot,dico); //ici !!!!!!!!!!!!!!!!!!!!!!!!!! qsort ((char**) dico, nb_mots,LONGMOT, strcmp); // Tri en mémoire, une nouvelle fois, du tableau dico } } fclose(f); f=fopen("dico.dat","w"); for (i=0; i!= EOF; i++) { fputs(mot_texte,dico.dat); // ICI !!!!!!!!!!!!!!!!!!!!!!!!!!!! } fclose(f); }
mype
Messages postés
2435
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
16 août 2010
436
29 mai 2008 à 19:17
29 mai 2008 à 19:17
ok deja pour le premier tu te trompe de fonction pour prendre ce que tu lis dans le fichier et le mettre dans dico tu doit utiliser fgets()
i=0; while(fgetc(f)!=EOF) { fgets(f,19,dico[i]); i++; }ensuite dans les deux autres cas tu veux faire quoi exactement ?
MouchT8
Messages postés
22
Date d'inscription
samedi 24 mai 2008
Statut
Membre
Dernière intervention
11 août 2008
1
29 mai 2008 à 19:30
29 mai 2008 à 19:30
//lecture mot par mot de tout le fichier et stockage dans un tableau en mémoire (dico)
=>
donc ici merci pour l'aide,^^
mais une nouvelle erreur se produit ..snif
'fgets' : impossible de convertir le paramètre 1 de 'FILE *' en 'char *'
Bon,
Pour les 2 autres:
ici, c'est valable si le mot saisis par l'utilisateur n'est pas dans le dictionnaire. Je demande donc si l'utilisateur veut noter le mot dans le dico avec les autres.. je suppose qu'il faut donc utiliser fgets aussi alors non? par déduction..
et ici eh bien voici l'énoncé tout simplement:
"ouverture du fichier dico.dat en ecriture, et ecriture mot par mot de tous les éléments du tableau dico."
=>
donc ici merci pour l'aide,^^
mais une nouvelle erreur se produit ..snif
'fgets' : impossible de convertir le paramètre 1 de 'FILE *' en 'char *'
Bon,
Pour les 2 autres:
if (rep=='oui') { fputs(mot,dico); //Ajout du mot dans le dico qsort ((char**) dico, nb_mots,LONGMOT, strcmp); // Tri en mémoire, une nouvelle fois, du tableau dico } }
ici, c'est valable si le mot saisis par l'utilisateur n'est pas dans le dictionnaire. Je demande donc si l'utilisateur veut noter le mot dans le dico avec les autres.. je suppose qu'il faut donc utiliser fgets aussi alors non? par déduction..
f=fopen("dico.dat","w"); for (i=0; i!= EOF; i++) { fputs(mot_texte,dico.dat); }
et ici eh bien voici l'énoncé tout simplement:
"ouverture du fichier dico.dat en ecriture, et ecriture mot par mot de tous les éléments du tableau dico."
mype
Messages postés
2435
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
16 août 2010
436
29 mai 2008 à 19:43
29 mai 2008 à 19:43
ha oui j'ai fait une petite erreur dans l'ordre des parametres ;)
pour le dernier c'est bien fputs qu'il faut utiliser mais le dernier parametre c'est pas le nom du fichier mais le flux et il faut ouvrir ton fichier avec le mode ajout "a" si tu veux que tout les mots soit marqué
fgets(dico[i],19,f);pour le deuxieme mot étant deja une variable je suppose que tu fais l'utilisateur lui donné une valeur avant dans ce cas pas besoin de fgets() on copie simplement mot a la bonne place dans dico
strcpy(dico[i],mot);il faut que tu inclus avant string.h aussi
#include <string.h>et aussi que tu choississe bien ton i dans dico pour pas effacer un mot qui est dans dico et pour placer le nouveau mot a la bonne place dans dico
pour le dernier c'est bien fputs qu'il faut utiliser mais le dernier parametre c'est pas le nom du fichier mais le flux et il faut ouvrir ton fichier avec le mode ajout "a" si tu veux que tout les mots soit marqué
f=fopen("dico.dat","a"); for (i=0; i<MAXMOTS; i++) { fputs(dico[i],f); } fclose(f);
MouchT8
Messages postés
22
Date d'inscription
samedi 24 mai 2008
Statut
Membre
Dernière intervention
11 août 2008
1
29 mai 2008 à 20:05
29 mai 2008 à 20:05
Ah merci beaucoup, beaucoup !!
PLus que 7 erreurs dans mon programme ^^ eheh
oui encore, et 2 warnings !!
2 warnings qui me disent toujours que mes 2 fopen sont déclarés désaprouvés !! grrrrr !!
J'ai trouvé 4 erreurs moi meme de mon coté mais c'est pas encore parfait!
Je vais essayer de me débrouiller un peu toute seule et je reviendrais si necessaire ^^
Merci encore !!!
PLus que 7 erreurs dans mon programme ^^ eheh
oui encore, et 2 warnings !!
2 warnings qui me disent toujours que mes 2 fopen sont déclarés désaprouvés !! grrrrr !!
J'ai trouvé 4 erreurs moi meme de mon coté mais c'est pas encore parfait!
Je vais essayer de me débrouiller un peu toute seule et je reviendrais si necessaire ^^
Merci encore !!!
MouchT8
Messages postés
22
Date d'inscription
samedi 24 mai 2008
Statut
Membre
Dernière intervention
11 août 2008
1
29 mai 2008 à 20:16
29 mai 2008 à 20:16
Bon peut etre encore une question idiote.
Je dois saisir sur un editeur de texte, me dit l'énoncé, par exemple celui du turb C, bo ici forcemen celui de VS puisque c'est lui que j'utilise, donc saisir mon fichier "dico.dat" et mon "ficher_texte" à traiter dans ce programme.
Pas de probleme je sais entrer dans l'editeur de texte a partir de la fenetre de commande de VS mais une fois mon fichier écrit, je doit l'enregister sous quel nom?
et est ce que le fait de l'enregistrer ainsi va permettre a mon programme de 'louvrir directement a l'execution ou alors je dois faire une autre manip?
Et aussi.. pour ce qui est de mo fichier dico.dat, c'est donc mon dictionnaire,je dois séparer les mots par des virgules??
lol
Je dois saisir sur un editeur de texte, me dit l'énoncé, par exemple celui du turb C, bo ici forcemen celui de VS puisque c'est lui que j'utilise, donc saisir mon fichier "dico.dat" et mon "ficher_texte" à traiter dans ce programme.
Pas de probleme je sais entrer dans l'editeur de texte a partir de la fenetre de commande de VS mais une fois mon fichier écrit, je doit l'enregister sous quel nom?
et est ce que le fait de l'enregistrer ainsi va permettre a mon programme de 'louvrir directement a l'execution ou alors je dois faire une autre manip?
Et aussi.. pour ce qui est de mo fichier dico.dat, c'est donc mon dictionnaire,je dois séparer les mots par des virgules??
lol
mype
Messages postés
2435
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
16 août 2010
436
29 mai 2008 à 20:23
29 mai 2008 à 20:23
tu dois donner a tes fichiers les meme noms que tu as mis dans ton programme donc "dico.dat" et "fichier_texte" et il faut aussi que tu les mettes dans le meme repertoire que ton executable pas de manip a faire
et puis il vaut mieux que tu mettes un mots sur chaque ligne dans ton fichier dico.dat c'est plus simple apres pour travailler dessus...
et puis il vaut mieux que tu mettes un mots sur chaque ligne dans ton fichier dico.dat c'est plus simple apres pour travailler dessus...
mype
Messages postés
2435
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
16 août 2010
436
29 mai 2008 à 20:17
29 mai 2008 à 20:17
un conseil commence toujours par resoudre les erreurs dans l'ordre de la premiere a la derniere et oui des fois en resolvant juste une erreur ça resout toutes les autres
bonne chance ;)
bonne chance ;)
MouchT8
Messages postés
22
Date d'inscription
samedi 24 mai 2008
Statut
Membre
Dernière intervention
11 août 2008
1
29 mai 2008 à 20:25
29 mai 2008 à 20:25
ok !!!
c'est bien ce que je me disait, ca aurait parrue debil de ne pas mettre les meme noms ^^
pour ce qui est du repertoire j'ai peur de passer pour une debile de nooby mais...
"le meme repertoire que mon executable"???
:D
oui les cours par correspondance ça n'est pas complet ni toujours bien expliqué...
snif
c'est bien ce que je me disait, ca aurait parrue debil de ne pas mettre les meme noms ^^
pour ce qui est du repertoire j'ai peur de passer pour une debile de nooby mais...
"le meme repertoire que mon executable"???
:D
oui les cours par correspondance ça n'est pas complet ni toujours bien expliqué...
snif
mype
Messages postés
2435
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
16 août 2010
436
29 mai 2008 à 20:35
29 mai 2008 à 20:35
oui je pense que tu dois avoir un dossier de ton compilateur ben quand tu compiles sa crée un executable dans ce dossier puis ensuite tu execute ben tu dois mettre tes fichiers dans ce dossier
l'autre solution c'est tu enregistre tes fichiers ou tu veux mais a ce moment la dans ton fopen() tu dois mettre le chemin absolu de l'endroit ou se trouve ton fichier par exemple
l'autre solution c'est tu enregistre tes fichiers ou tu veux mais a ce moment la dans ton fopen() tu dois mettre le chemin absolu de l'endroit ou se trouve ton fichier par exemple
fopen("C:\\Documents\\lendroit_ou_se_trouve_ton_fichier\\dico.dat","r");
MouchT8
Messages postés
22
Date d'inscription
samedi 24 mai 2008
Statut
Membre
Dernière intervention
11 août 2008
1
29 mai 2008 à 20:49
29 mai 2008 à 20:49
OK merci beaucoup j'espere pouvoir me débrouiller !!!
MouchT8
Messages postés
22
Date d'inscription
samedi 24 mai 2008
Statut
Membre
Dernière intervention
11 août 2008
1
30 mai 2008 à 11:37
30 mai 2008 à 11:37
Ca y est j'ai résolu le problem de mon "fopen" !
en modifiant mes options VS, plus de warning!! (youguiiiiii !!)
Par contre la il ne me reste plus que quelques erreurs et je ne comprend pas !
Je dois créer 2 fonctions, sup_maj et sup_ponc, pour supprimer majuscule donc, et ponctuation dans mon "fichier_texte" en lisant les mot un par un!
voici ce que j'ai fait::
Mais apparemment j'ai fait ça tres tres mal d'après toutes les erreurs trouvées!
Vous voyez une erreur quelquepart vous?
en modifiant mes options VS, plus de warning!! (youguiiiiii !!)
Par contre la il ne me reste plus que quelques erreurs et je ne comprend pas !
Je dois créer 2 fonctions, sup_maj et sup_ponc, pour supprimer majuscule donc, et ponctuation dans mon "fichier_texte" en lisant les mot un par un!
voici ce que j'ai fait::
void sup_ponc(char mot) { for (mot_texte==getc(fichier_texte); mot_texte<MAXMOTS){ puts(isalpha(mot_texte),fichier_texte);} } void sup_maj (char mot) { for (mot_texte==getc(fichier_texte); mot_texte<MAXMOTS) { puts(tolower(mot_texte),fichier_texte);} }
Mais apparemment j'ai fait ça tres tres mal d'après toutes les erreurs trouvées!
Vous voyez une erreur quelquepart vous?
mich62120
Messages postés
631
Date d'inscription
jeudi 22 novembre 2007
Statut
Membre
Dernière intervention
21 janvier 2010
6
30 mai 2008 à 13:40
30 mai 2008 à 13:40
Slt,
La boucle for n'est pas bonne.Le premier termes doit être une affectation et il y en a un troisieme qui represente l'incrementation donc je pense que tu dois voir ton fichier comme un tableau de char dont tu gérera l'indice dans la boucle for.
Je ne vois pas comment tu veux faire vu que tu ne te sert pas de ton argument.
La boucle for n'est pas bonne.Le premier termes doit être une affectation et il y en a un troisieme qui represente l'incrementation donc je pense que tu dois voir ton fichier comme un tableau de char dont tu gérera l'indice dans la boucle for.
Je ne vois pas comment tu veux faire vu que tu ne te sert pas de ton argument.
mype
Messages postés
2435
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
16 août 2010
436
30 mai 2008 à 18:45
30 mai 2008 à 18:45
oui c'est vrai je ne comprends pas non plus pourquoi tu donnes un arguments au fonction alor que tu ne l'utilise pas....
tu pourrais parcourir ton fichier avec une boucle while puis recopié tous les caracteres sauf les ponctuation ou les majuscules dans un fichier temporaire puis recopié le fichier temporaire dans ton ancien fichier
ça ressemble un peu a ça
tu pourrais parcourir ton fichier avec une boucle while puis recopié tous les caracteres sauf les ponctuation ou les majuscules dans un fichier temporaire puis recopié le fichier temporaire dans ton ancien fichier
ça ressemble un peu a ça
char c; while(c=fgetc(f)!=EOF) //la tu recopie tous les caracteres qui sont des lettres seulement { if(c>='a' || c<='z') fprintf(fichier,"%c",c); } while(c=fgetc(fichier)!=EOF) // la tu recopies le fichier temporaires dans ton ancien fichier { fprintf(f,"%c",c); }
suite a une absence de 2 semaines je reprend juste mon devoir maintenant.
Voici mon code actuel:
V.S m'indique que sup_ponc, sup_maj ont été déclarées désaprouvé !
Qu'est ce que cela veut il dire ?
Erreur 5 error C2664: 'dichotomie' : impossible de convertir le paramètre 1 de 'char' en 'char **' c:\documents and settings\lamouchetoutecrad\mes documents\visual studio 2005\projects\devoir 8\devoir 8\dv8.cpp 114
Erreur 6 error C2065: 'mot_texte' : identificateur non déclaré c:\documents and settings\lamouchetoutecrad\mes documents\visual studio 2005\projects\devoir 8\devoir 8\dv8.cpp 102
Erreur 7 error C2065: 'argv' : identificateur non déclaré c:\documents and settings\lamouchetoutecrad\mes documents\visual studio 2005\projects\devoir 8\devoir 8\dv8.cpp 102
Voici mon code actuel:
#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; } //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"); //TRAITEMENT POUR CHAQUE MOT DU TEXTE: suppression de majuscule et de ponctuation for (i=0; i<nb_mots;i++){ void sup_ponc(char mot) { for (mot_texte==getc(argv); mot_texte!=EOF;) { putc(isalpha(mot_texte),argv);} } void sup_maj (char mot) { for (mot_texte==getc(argv); mot_texte!=EOF;) { putc(tolower(mot_texte),argv);} } } //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); }
V.S m'indique que sup_ponc, sup_maj ont été déclarées désaprouvé !
Qu'est ce que cela veut il dire ?
Erreur 5 error C2664: 'dichotomie' : impossible de convertir le paramètre 1 de 'char' en 'char **' c:\documents and settings\lamouchetoutecrad\mes documents\visual studio 2005\projects\devoir 8\devoir 8\dv8.cpp 114
Erreur 6 error C2065: 'mot_texte' : identificateur non déclaré c:\documents and settings\lamouchetoutecrad\mes documents\visual studio 2005\projects\devoir 8\devoir 8\dv8.cpp 102
Erreur 7 error C2065: 'argv' : identificateur non déclaré c:\documents and settings\lamouchetoutecrad\mes documents\visual studio 2005\projects\devoir 8\devoir 8\dv8.cpp 102
Après modification en réalité V.S m'indique que mes définitions de fonction ne sont pas conformes, en ce qui concerne sup_ponc et sup_maj.
Je ne vois pas ou est mon erreur?
Effectivement je passe un parametre et je ne m'en sert pas, j'ai donc remplacé mot par mot_texte mais ca ne change rien au fait que mes définitions ne sont apareement pas conformes...
Erreur 1 error C2601: 'sup_ponc' : définitions de fonctions locales non conformes c:\documents and settings\lamouchetoutecrad\mes documents\visual studio 2005\projects\devoir 8\devoir 8\dv8.cpp 101
Erreur 2 error C2601: 'sup_maj' : définitions de fonctions locales non conformes c:\documents and settings\lamouchetoutecrad\mes documents\visual studio 2005\projects\devoir 8\devoir 8\dv8.cpp 106
Erreur 3 error C2664: 'dichotomie' : impossible de convertir le paramètre 1 de 'char' en 'char **' c:\documents and settings\lamouchetoutecrad\mes documents\visual studio 2005\projects\devoir 8\devoir 8\dv8.cpp 114
Erreur 4 error C2065: 'argv' : identificateur non déclaré c:\documents and settings\lamouchetoutecrad\mes documents\visual studio 2005\projects\devoir 8\devoir 8\dv8.cpp 102
Je ne vois pas ou est mon erreur?
Effectivement je passe un parametre et je ne m'en sert pas, j'ai donc remplacé mot par mot_texte mais ca ne change rien au fait que mes définitions ne sont apareement pas conformes...
Erreur 1 error C2601: 'sup_ponc' : définitions de fonctions locales non conformes c:\documents and settings\lamouchetoutecrad\mes documents\visual studio 2005\projects\devoir 8\devoir 8\dv8.cpp 101
Erreur 2 error C2601: 'sup_maj' : définitions de fonctions locales non conformes c:\documents and settings\lamouchetoutecrad\mes documents\visual studio 2005\projects\devoir 8\devoir 8\dv8.cpp 106
Erreur 3 error C2664: 'dichotomie' : impossible de convertir le paramètre 1 de 'char' en 'char **' c:\documents and settings\lamouchetoutecrad\mes documents\visual studio 2005\projects\devoir 8\devoir 8\dv8.cpp 114
Erreur 4 error C2065: 'argv' : identificateur non déclaré c:\documents and settings\lamouchetoutecrad\mes documents\visual studio 2005\projects\devoir 8\devoir 8\dv8.cpp 102
29 mai 2008 à 17:28