pb programme de conjugaison et fgets

  • Auteur de la discussion pomporo
  • Date de début

pomporo

Nouveau membre
Bonjour! j'essaye actuellement de faire un programme qui fasse les conjugaison de verbes.
Cependant je rencontre des erreurs. J'ai changé la fonction gets par fgets pour récupérer la valeur saisie mais je n'arrive pas à tester le retour. j'ai comme message d'erreur "undefined reference to flush". Si vous avez une idée merci!
Code:
int viregulier(char *input)
{
	FILE *fptr;
	int i=0;
	char buffer;
	char *extension=".txt";  
	char nomfichier[100];

	for(i=0;i<sizeof(irregulier)/sizeof(char*);i++)
	{
		if(strcmp(input,*(irregulier+i))==0)
		{
			strcpy(nomfichier,input);
			strcat(nomfichier,extension);
			printf("%s",nomfichier);
			if((fptr = fopen(nomfichier, "rt")) == NULL)		
			{
				printf("Désolé nous n'avons pas ce verbe");
				return 1;
			}			
			while((buffer = fgetc(fptr))!=EOF)
				putchar(buffer);
			fclose(fptr);			
			return 1;
		}		
	}	
	return 0;
};

 main()
{		
	
	char *er = "er";
	char *re = "re";
	char *ir = "ir";

	char input[200];
        char output[200];    
	const char **ptrconjugaison;	
	
	char *ptr; 
	char again = 0;
	int i=0,j=0;	

	while(again!='n' && again!='N')
	{
	  printf("\nChoisissez un verbe à conjuguer : ");

		if (fgets(input,sizeof input,stdin) != NULL)
                {
		   if(!viregulier(input))
		    {
			ptr = &input[strlen(input)-2];

			if(strcmp(ptr,er)==0)					
				ptrconjugaison = prem_conjugaison;
			else if(strcmp(ptr,re)==0)		
				ptrconjugaison = deux_conjugaison;
			else if(strcmp(ptr,ir)==0)
				ptrconjugaison = trois_conjugaison;
			else
			{			
			printf("Verbe incorrect");
			printf("\nChoisissez un autre verbe (N pour quitter) :");
				again = getchar();
				
			}				
            		
			printf("\nInfinitif  %s\n\n",ptr);
			
			input[strlen(input)-2]='\0';
			strcpy(output,input);
			printf("\nPresent :\n");
			for(j=0;j<6;j++)
				printf("%10s  %s\n",pronoms[j],input,*(ptrconjugaison++));
			printf("\nSubjonctif :\n");
			for(j=0;j<6;j++)
				printf("%10s  %s\n",pronoms[j],input,*(ptrconjugaison++));
			printf("\nFutur :\n");
			for(j=0;j<6;j++)
				printf("%10s  %s\n",pronoms[j],input,*(ptrconjugaison++));
			printf("\nConditionel  :\n");
			for(j=0;j<6;j++)
				printf("%10s  %s\n",pronoms[j],input,*(ptrconjugaison++));
			printf("\nImparfait :\n");
			for(j=0;j<6;j++)
				printf("%10s  %s\n",pronoms[j],input,*(ptrconjugaison++));
			printf("\nPasse  :\n");
			for(j=0;j<6;j++)
				printf("%10s  %s\n",pronoms[j],input,*(ptrconjugaison++));
			printf("\nImparfait du Subjonctif :\n");
			for(j=0;j<6;j++)
				printf("%10s  %s\n",pronoms[j],input,*(ptrconjugaison++));
			printf("\nParticipe Present :\n");
			for(j=0;j<4;j++)
				printf("%10s%s\n",input,*(ptrconjugaison++));
			printf("\nParticipe Passe :\n");
			for(j=0;j<4;j++)
				printf("%10s%s\n",input,*(ptrconjugaison++));
		}
		// =======================================		
		printf("\n\nSaisissez un verbe (N pour quitter) :");
		again = getchar();
		fflush(stdin);  
	}
     }
	printf("\nAu revoir!!\n\n");		
}
 

zeb

Modérateur
Code:
if (fgets(input,sizeof input,stdin) != NULL)
->
Code:
if (fgets(input,sizeof(input)-1,stdin) != NULL)

(Le -1 c'est pour le \0 ;) )
 

Emmanuel Delahaye

Expert
Code:
if (fgets(input,sizeof input,stdin) != NULL)
->
Code:
if (fgets(input,sizeof(input)-1,stdin) != NULL)

(Le -1 c'est pour le \0 ;) )
Inutile, fgets() en tient déjà compte.

 

Emmanuel Delahaye

Expert

Merci de poster du code un peu plus compilable que ça...
[fixed]
Project : Forums
Compiler : GNU GCC Compiler (called directly)
Directory : D:\dev\ed02\cb\
--------------------------------------------------------------------------------
Switching to target: default
Compiling: main.c
main.c:2: warning: no previous prototype for 'viregulier'
main.c: In function `viregulier':
main.c:3: error: `FILE' undeclared (first use in this function)
main.c:3: error: (Each undeclared identifier is reported only once
main.c:3: error: for each function it appears in.)
main.c:3: error: `fptr' undeclared (first use in this function)
main.c:6: warning: initialization discards qualifiers from pointer target type
main.c:9: error: `irregulier' undeclared (first use in this function)
main.c:11: error: implicit declaration of function `strcmp'
main.c:11: warning: nested extern declaration of `strcmp'
<internal>:0: warning: redundant redeclaration of 'strcmp'
main.c:13: error: implicit declaration of function `strcpy'
main.c:13: warning: nested extern declaration of `strcpy'
<internal>:0: warning: redundant redeclaration of 'strcpy'
main.c:14: error: implicit declaration of function `strcat'
main.c:14: warning: nested extern declaration of `strcat'
<internal>:0: warning: redundant redeclaration of 'strcat'
main.c:15: error: implicit declaration of function `printf'
main.c:15: warning: nested extern declaration of `printf'
<internal>:0: warning: redundant redeclaration of 'printf'
main.c:16: error: implicit declaration of function `fopen'
main.c:16: warning: nested extern declaration of `fopen'
main.c:16: error: `NULL' undeclared (first use in this function)
main.c:21: error: implicit declaration of function `fgetc'
main.c:21: warning: nested extern declaration of `fgetc'
main.c:21: error: `EOF' undeclared (first use in this function)
main.c:22: error: implicit declaration of function `putchar'
main.c:22: warning: nested extern declaration of `putchar'
<internal>:0: warning: redundant redeclaration of 'putchar'
main.c:23: error: implicit declaration of function `fclose'
main.c:23: warning: nested extern declaration of `fclose'
main.c: At top level:
main.c:31: warning: return type defaults to `int'
main.c: In function `main_':
main.c:33: warning: initialization discards qualifiers from pointer target type
main.c:34: warning: initialization discards qualifiers from pointer target type
main.c:35: warning: initialization discards qualifiers from pointer target type
main.c:47: warning: nested extern declaration of `printf'
<internal>:0: warning: redundant redeclaration of 'printf'
main.c:49: error: implicit declaration of function `fgets'
main.c:49: warning: nested extern declaration of `fgets'
main.c:49: error: `stdin' undeclared (first use in this function)
main.c:49: error: `NULL' undeclared (first use in this function)
main.c:53: error: implicit declaration of function `strlen'
main.c:53: warning: nested extern declaration of `strlen'
<internal>:0: warning: redundant redeclaration of 'strlen'
main.c:55: warning: nested extern declaration of `strcmp'
<internal>:0: warning: redundant redeclaration of 'strcmp'
main.c:56: error: `prem_conjugaison' undeclared (first use in this function)
main.c:58: error: `deux_conjugaison' undeclared (first use in this function)
main.c:60: error: `trois_conjugaison' undeclared (first use in this function)
main.c:65: error: implicit declaration of function `getchar'
main.c:65: warning: nested extern declaration of `getchar'
main.c:72: warning: nested extern declaration of `strcpy'
<internal>:0: warning: redundant redeclaration of 'strcpy'
main.c:75: error: `pronoms' undeclared (first use in this function)
main.c:75: warning: too many arguments for format
main.c:78: warning: too many arguments for format
main.c:81: warning: too many arguments for format
main.c:84: warning: too many arguments for format
main.c:87: warning: too many arguments for format
main.c:90: warning: too many arguments for format
main.c:93: warning: too many arguments for format
main.c:103: warning: nested extern declaration of `getchar'
main.c:65: warning: redundant redeclaration of 'getchar'
main.c:65: warning: previous implicit declaration of 'getchar' was here
main.c:104: error: implicit declaration of function `fflush'
main.c:104: warning: nested extern declaration of `fflush'
main.c:107: warning: nested extern declaration of `printf'
<internal>:0: warning: redundant redeclaration of 'printf'
main.c:43: warning: unused variable `i'
main.c:108:2: warning: no newline at end of file
Process terminated with status 1 (0 minutes, 1 seconds)
25 errors, 44 warnings
[/fixed]
 

pomporo

Nouveau membre
bonjour Emmanuel , désolé pour la compilation mais effectivement je me suis trompé de programme à force de faire des version bêta.
bon je sais c'est pas génial mais j'utilise finalement un scanf qui à mon niveau est plus facile car je ne sais pas comment tester le retour. j'ai regarder sur ton site et après plusieurs tentatives je n'ai pas réussi.
Voici ce que j'ai fait, cela fonctionne, il faut maintenant que je le complexifie pour le j et le j' par exemple.
le probleme que je vais rencontrer également c'est que pour chaque verbe "irregulier" je vais devoir faire un fichier texte.

Code:
#include<stdio.h>

#include<string.h>

const char *irregulier[]={"faire","pouvoir","avoir","etre","prendre","devoir","permettre",

		"mettre","aller","voir","dire","savoir","joindre","venir",

        "vouloir","attendre","envoyer","transmettre","partir","courir","finir",

		"aimer","tenir","appeler","asseoir","taire","manger","choisir",

		"connaitre","comprendre","sortir","sentir","croire","recevoir","plaire",

		"ecrire","mourir","essayer","boire","jouer","rendre","lire",

		"passer","repondre","jeter","reussir","suivre","donner","convenir","etablir"};





const char *prem_conjugaison[]={ "e","es","e","ons","ez","ent",

		               "e","es","e","ions","iez","ent",

                       "erai","eras","era","erons","erez","eront",

					   "erais","erais","erait","erions","eriez","eraient",

                       "ais","ais","ait","ions","iez","aient",

                       "ai","as","a","ames","ates","arent",

                       "asse","asses","at","assions","assiez","assent",

					   "ant","ante","ants","antes",

					   "e","e","e","e"};

const char *deux_conjugaison[]={"s","s"," ","ons","ez","ent",

		"e","es","e","ions","iez","ent",

		"rai","ras","ra","rons","rez","ront",

		"rais","rais","rait","rions","riez","raient",

        "ais","ais","ait","ions","iez","aient",

        "is","is","it","imes","ites","irent",

        "isse","isses","it","issions","issiez","issent",

		"ant","ant","ant","ant",

        "u","u","u","u"};

const char *trois_conjugaison[]={"is","is","it","issons","issez","issent",

        "isse","isses","isse","issions","issiez","issent",

        "irai","iras","ira","irons","irez","iront",

        "irais","irais","irait","irions","iriez","iraient",

        "issais","issais","issait","issions","issiez","issaient",

        "is","is","it","imes","ites","irent",

        "isse","isses","it","issions","issiez","issent",

		"issant","issant","issant","issant",

        "i","i","i","i"};



char * pronoms[6]={"je","tu","il/elle","nous","vous","ils/elles"};



int viregulier(char *input)

{

	FILE *fptr;

	int i=0;

	char buffer;

	char *extension=".txt";  

	char nomfichier[100];



	for(i=0;i<sizeof(irregulier)/sizeof(char*);i++)

	{

		if(strcmp(input,*(irregulier+i))==0)

		{

			strcpy(nomfichier,input);

			strcat(nomfichier,extension);

			printf("%s",nomfichier);

			if((fptr = fopen(nomfichier, "rt")) == NULL)		

			{

				printf("Désolé nous n'avons pas ce verbe");

				return 1;

			}			

			while((buffer = fgetc(fptr))!=EOF)

				putchar(buffer);

			fclose(fptr);			

			return 1;

		}		

	}	

	return 0;

};



 main()

{		

	

	char *er = "er";

	char *re = "re";

	char *ir = "ir";



	char input[200];

        char output[200];    

	const char **ptrconjugaison;	

	

	char *ptr; 

	char again = 0;

	int i=0,j=0;	



	while(again!='n' && again!='N')

	{

		printf("\nChoisissez un verbe a conjuguer : ");

		scanf("%s",input);

		if(!viregulier(input))

		{

			ptr = &input[strlen(input)-2];



			if(strcmp(ptr,er)==0)					

				ptrconjugaison = prem_conjugaison;

			else if(strcmp(ptr,re)==0)		

				ptrconjugaison = deux_conjugaison;

			else if(strcmp(ptr,ir)==0)

				ptrconjugaison = trois_conjugaison;

		 	

			printf("\nInfinitif  %s\n\n",ptr);

			

			input[strlen(input)-2]='\0';

			strcpy(output,input);

			printf("\nPresent :\n");

			for(j=0;j<6;j++)

				printf("%10s  %s%s\n",pronoms[j],input,*(ptrconjugaison++));

			printf("\nSubjonctif :\n");

			for(j=0;j<6;j++)

				printf("%10s  %s%s\n",pronoms[j],input,*(ptrconjugaison++));

			printf("\nFutur :\n");

			for(j=0;j<6;j++)

				printf("%10s  %s%s\n",pronoms[j],input,*(ptrconjugaison++));

			printf("\nConditionel  :\n");

			for(j=0;j<6;j++)

				printf("%10s  %s%s\n",pronoms[j],input,*(ptrconjugaison++));

			printf("\nImparfait :\n");

			for(j=0;j<6;j++)

				printf("%10s  %s%s\n",pronoms[j],input,*(ptrconjugaison++));

			printf("\nPasse  :\n");

			for(j=0;j<6;j++)

				printf("%10s  %s%s\n",pronoms[j],input,*(ptrconjugaison++));

			printf("\nImparfait du Subjonctif :\n");

			for(j=0;j<6;j++)

				printf("%10s  %s%s\n",pronoms[j],input,*(ptrconjugaison++));

			printf("\nParticipe Present :\n");

			for(j=0;j<4;j++)

				printf("%10s %s%s\n",pronoms[j],input,*(ptrconjugaison++));

			printf("\nParticipe Passe :\n");

			for(j=0;j<4;j++)

				printf("%10s %s%s\n",pronoms[j],input,*(ptrconjugaison++));

		}

		// =======================================		

 

	}

	printf("\nAu revoir!!\n\n");		

}
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 122
Messages
6 717 684
Membres
1 586 355
Dernier membre
Chris7miles77
Partager cette page
Haut