Programme de verification d'orthographe

Fermé
pépereF Messages postés 36 Date d'inscription dimanche 11 décembre 2005 Statut Membre Dernière intervention 25 janvier 2008 - 11 juil. 2007 à 22:15
 biloute - 7 juin 2008 à 18:05
Bonjour,
voici mon programme:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<ctype.h>

#define MAXMOTS 100 /*Nombre maxi de dictionnaire dans le dictionnaire*/
#define LONGMOT 20 /*Longueur en caractére d'un mot*/
/*Déclaration des fonctions utilisées*/
int compare_chaines (const void*s1,const void*s2);
short dichotomie(char**dico,char*mot,short nb_mots);
void sup_ponc(char*mot);
void sup_maj(char*mot);
void ajout(char**dico,char*mot,short nb_mots);

int main(int argc,char*argv[])
{
	/*Déclaration et initialisation des variables*/
    short nb_mots,trouve;
    char*mot;
    char**dico;
    char fichtext[20];
    char ajoudico[4];
    FILE*fichierdico;
    FILE*fichiertext;
    int termine,cptr;
    nb_mots=0;
    termine=0;
    mot=(char*)malloc(LONGMOT*sizeof(char));
	if(mot==NULL)
	{
	printf("probleme d'allocation memoire pour mot\n");
	}
	dico=(char**)malloc(MAXMOTS*sizeof(char*));
	if(dico==NULL)
	{
		printf("probleme d'allocation memoire pour dico\n");
	}
	/*verification du nombre d'arguments*/
	if(argc!=2)
	{
		printf("Erreur dans le nombre d'arguments. Utilisation: \n");
		printf("%s dico.dat\n",argv[0]);
		exit(EXIT_FAILURE);
	}
	/*ouverture du fichier dictionaire*/
	fichierdico=fopen(argv[1],"r");
	if(NULL==fichierdico)
	{
		printf("impossible d'ouvrir %s .\n",argv[1]);
		exit(EXIT_FAILURE);
	}
	/*Stockage du dictionnaire en memoire*/
	while(!feof(fichierdico))
	{
		fscanf(fichierdico,"%s\n",mot);
		*(dico+nb_mots)=(char*)malloc(strlen(mot)+1);
		if(*(dico+nb_mots)==NULL)
		{
			printf("probleme d'allocation memoire\n");
		}
		strcpy(*(dico+nb_mots),mot);
		nb_mots++;
	}
	fclose(fichierdico);
	/*Tri du tableau dico*/
	qsort(dico,nb_mots,sizeof(*dico),compare_chaines);
	/*ouverture du fichier texte en lecture*/
	printf("Quel est le nom du fichier texte?");
	scanf("%s",fichtext);
	fichiertext=fopen(fichtext,"r");
	if(NULL==fichiertext)
	{
		printf("Impossible d'ouvrir %s .\n",fichtext);
		exit(EXIT_FAILURE);
	}
	/*Lecture de chaque mot du texte*/
	fscanf(fichiertext,"%s",mot);
	while(!feof(fichiertext))
	{
		sup_ponc(mot);/*supression de la ponctuation*/
		sup_maj(mot);/*Convertion des majuscules en minuscules*/
		trouve=dichotomie(dico,mot,nb_mots);/*recherche du mot dans dico*/
		if(trouve==0)
		{
			printf("Voulez-vous ajouter le mot %s au dictionnaire? (oui ou non)",mot);
			scanf("%s",ajoudico);
			if(!(strcmp(ajoudico,"oui")))
			{
				ajout(dico,mot,nb_mots);/*ajout du mot dans dico*/
				nb_mots++;
				/*triage de dico*/
				qsort(dico,nb_mots,sizeof(*dico),compare_chaines);
			}
		}
		fscanf(fichiertext,"%s",mot);
	}
	fclose(fichiertext);
	/*ouverture du fichier dico.dat en ecriture*/
	fichierdico=fopen(argv[1],"w");
	if(NULL==fichierdico)
	{
		printf("Impossible d'ouvrir %s .\n",argv[1]);
		exit(EXIT_FAILURE);
	}
	/*ecriture mot par mot de tous les éléments du tableau dico*/
	for(cptr=0;cptr<nb_mots;cptr++)
	{
		fprintf(fichierdico,"%s\n",*(dico+cptr));
	}
	fclose(fichierdico);
	/*liberation d'éspace mémoire*/
	free(mot);
	free(dico);
	exit(EXIT_SUCCESS);
}
short dichotomie(char**dico,char*mot,short nb_mots)
{
	/*Initialisation des variables*/
	int i,j,k,trouve,inter;
	i=0;
	j=nb_mots;
	k=(nb_mots/2);
	/*recherche du mot saisi dans le dico*/
	do
	{
		inter=j-i;
		k=(j+i)/2;
		trouve=strcmp(*(dico+k),mot);
		if(trouve>0) j=k;
		if(trouve<0) i=k;
		if(trouve==0) inter=1;
	}
	while(inter>1);
	/*affichage resultat recherche*/
	if(trouve==0)
	{
		return 1;
	}
	else 
	{
		return 0;
	}
}
int compare_chaines(const void*s1,const void*s2)
{
	return strcmp(*(char**)s1,*(char**)s2);
}
void sup_ponc(char*mot)
{
	int n,cptr1,cptr2;
	char*mottmp;
	n=0;
	mottmp=(char*)malloc(LONGMOT*sizeof(char));
	if (mottmp==NULL)
	{
		printf("Probleme d'allocation memoire\n");
	}
	while((*(mot+n))!='\0')
	{
		if(ispunct(*(mot+n))&&(*(mot+n+1)=='\0'))
		{
			*(mot+n)='\0';
			n--;
		}
		if(ispunct(*(mot+n))&&isalnum(*(mot+n+1)))
		{
			/*traitement cas particulier.Par exemple:
			pour un mot pour s'effectue,le mot devient
			effectue*/
			if(n==1)
			{
				for(cptr1=2,cptr2=0;*(mot+cptr1)!='\0';cptr1++,cptr2++)
				{
					*(mottmp+cptr2)=*(mot+cptr1);
				}
				*(mottmp+cptr2)='\0';
				strcpy(mot,mottmp);
				free(mottmp);
				n=cptr2;
				n--;
			}
			else 
				/*dans l'autre cas, la ponctuation est remplacé par le caractére
				espace*/
			{
				*(mot+n)=' ';
			}
		}
		n++;
	}
}
void sup_maj(char*mot)
{
	int n=0;
	while((*(mot+n))!='\0')
	{
		if(isupper(*(mot+n)))
		{
			*(mot+n)=tolower(*(mot+n));
		}
		n++;
	}
}
void ajout(char**dico,char*mot,short nb_mots)
{
	*(dico+nb_mots)=(char*)malloc(strlen(mot)+1);
	if(*(dico+nb_mots)==NULL)
	{
		printf("Probleme d'allocation de memoire\n");
	}
	else
	{
		strcpy(*(dico+nb_mots),mot);
	}
}

il se compile sans erreurs mais voila ce que j'ai à l'execution:

Erreur dans le nombre d'arguments. Utilisation:
c:\Documents and Settings\Utilisateur1\Mes documents\Visual Studio 2005\Projects
\Devoir N░8\Dev8exo2\debug\Dev8exo2.exe dico.dat
Appuyez sur une touche pour continuer...

je ne comprend pas.
pourriez-vous m'aider?
(je compile en c avec visual studio 2005 standard Edition)
merci d'avance

3 réponses

sfel Messages postés 1640 Date d'inscription lundi 18 juin 2007 Statut Membre Dernière intervention 15 juillet 2009 430
12 juil. 2007 à 09:57
il ne te dis pas a qu'elle ligne ?

aparement il te manque un argument lors d'une fonction utilisant ton dico.dat
0
pépereF Messages postés 36 Date d'inscription dimanche 11 décembre 2005 Statut Membre Dernière intervention 25 janvier 2008 2
13 juil. 2007 à 06:49
en fait ce n'est pas une erreur, mais une partie du programme sur l'invite de commande, et le probléme c'est que je ne peut plus rien faire ensuite car le programme m'invite a appuyer sur une touche pour quitter.
donc il y a surement quelque chose dans mon programme qui ne va pas.
merci pour vos reponses
0
Je suis un homme jaloux très jaloux, un jour d'été j'ai vu ma fiancée me tromper avec un mec que je ne savais pas l'identité pas donc pour la récupérer j'étais prêt a tout au péril de ma vie.
Un jour j'en est eu marre j'ai donc mis plein d'ingrédient dans un récipient sans regarder ce que je mettais et je les renverser sur moi ce qui ma assommer j'ai dormis toute une nuit avec un mal de tête énorme.
Le lendemain matin, j'ai ouvert les yeux je me suis sentie très fort, une grande puissance était en moi, je me suis levée je me suis regarder dans la glace. J'ai étais stupéfié de l'apparence que j'avais prise en une nuit, j'étais d'une couleur verte pour mes cheveux ainsi que la langue et un peu plus claire pour mon visage, j'avais les yeux rouge sang.
J'étais devenu [b][u]Green-Man[/u][/b] ! ! !
Maintenant que jetait devenue fort je me suis dit que j'allais lui péter la tronche à l'autre fumier qui se taper ma copine donc pour le retrouver je demande ma carte de permission de tchatche pour lui dire deux mots.
0