IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

[Débutant]programme de conjugaison avec les trois groupes


Sujet :

C

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 157
    Points : 66
    Points
    66
    Par défaut [Débutant]programme de conjugaison avec les trois groupes
    Bonjour à tous!
    voilà j'ai fais ce programme avec un ami mais on rencontre des problèmes lorsqu'on l'exécute. Pour les 2 premiers groupes on a mis des pointeurs contenant toutes les terminaisons et pour le troisème groupe on recupère des verbes conjugués dans des fichiers.
    Voici le corps:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
     
    #include<stdio.h>
     
    #include<string.h>
     
    const char *irregulier&#91;&#93;=&#123;"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"&#125;;
     
     
     
     
     
    const char *prem_conjugaison&#91;&#93;=&#123; "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"&#125;;
     
    const char *deux_conjugaison&#91;&#93;=&#123;"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"&#125;;
     
    const char *trois_conjugaison&#91;&#93;=&#123;"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"&#125;;
     
     
     
    int viregulier&#40;char *input&#41;
     
    &#123;
     
    	FILE *fptr;
     
    	int i=0;
     
    	char buffer;
     
    	char *extension=".txt";  
     
    	char nomfichier&#91;100&#93;;
     
     
     
    	for&#40;i=0;i<sizeof&#40;irregulier&#41;/sizeof&#40;char*&#41;;i++&#41;
     
    	&#123;
     
    		if&#40;strcmp&#40;input,*&#40;irregulier+i&#41;&#41;==0&#41;
     
    		&#123;
     
    			strcpy&#40;nomfichier,input&#41;;
     
    			strcat&#40;nomfichier,extension&#41;;
     
    			printf&#40;"%s",nomfichier&#41;;
     
    			if&#40;&#40;fptr = fopen&#40;nomfichier, "rt"&#41;&#41; == NULL&#41;		
     
    			&#123;
     
    				printf&#40;"Désolé nous n'avons pas ce verbe"&#41;;
     
    				return 1;
     
    			&#125;			
     
    			while&#40;&#40;buffer = fgetc&#40;fptr&#41;&#41;!=EOF&#41;
     
    				putchar&#40;buffer&#41;;
     
    			fclose&#40;fptr&#41;;			
     
    			return 1;
     
    		&#125;		
     
    	&#125;	
     
    	return 0;
     
    &#125;;
     
     
     
     main&#40;&#41;
     
    &#123;		
     
     
     
    	char *er = "er";
     
    	char *re = "re";
     
    	char *ir = "ir";
     
     
     
    	char input&#91;200&#93;;
            char output&#91;200&#93;;    
     
    	const char **ptrconjugaison;	
     
     
     
    	char *ptr; 
     
    	char again = 0;
     
    	int i=0,j=0;	
     
     
     
    	while&#40;again!='n' && again!='N'&#41;
     
    	&#123;
     
    		printf&#40;"\nChoisissez un verbe à conjuguer &#58; "&#41;;
     
    		gets&#40;input&#41;;
     
    		if&#40;!viregulier&#40;input&#41;&#41;
     
    		&#123;
     
    			ptr = &input&#91;strlen&#40;input&#41;-2&#93;;
     
     
     
    			if&#40;strcmp&#40;ptr,er&#41;==0&#41;					
     
    				ptrconjugaison = prem_conjugaison;
     
    			else if&#40;strcmp&#40;ptr,re&#41;==0&#41;		
     
    				ptrconjugaison = deux_conjugaison;
     
    			else if&#40;strcmp&#40;ptr,ir&#41;==0&#41;
     
    				ptrconjugaison = trois_conjugaison;
     
    			else
     
    			&#123;			
     
    				printf&#40;"Verbe incorrect"&#41;;
     
    				printf&#40;"\nChoisissez un autre verbe &#40;N pour quitter&#41; &#58;"&#41;;
     
    				again = getchar&#40;&#41;;
     
    				fflush&#40;stdin&#41;;  
     
    				continue;
     
    			&#125;				
     
     
     
    			printf&#40;"\nInfinitif  %s\n\n",ptr&#41;;
     
     
     
    			input&#91;strlen&#40;input&#41;-2&#93;='\0';
     
    			strcpy&#40;output,input&#41;;
     
    			printf&#40;"\nPresent \n"&#41;;
     
    			for&#40;j=0;j<6;j++&#41;
     
    				printf&#40;"%10s%s\n",input,*&#40;ptrconjugaison++&#41;&#41;;
     
    			printf&#40;"\nSubjonctif \n"&#41;;
     
    			for&#40;j=0;j<6;j++&#41;
     
    				printf&#40;"%10s%s\n",input,*&#40;ptrconjugaison++&#41;&#41;;
     
    			printf&#40;"\nFutur \n"&#41;;
     
    			for&#40;j=0;j<6;j++&#41;
     
    				printf&#40;"%10s%s\n",input,*&#40;ptrconjugaison++&#41;&#41;;
     
    			printf&#40;"\nConditionel  \n"&#41;;
     
    			for&#40;j=0;j<6;j++&#41;
     
    				printf&#40;"%10s%s\n",input,*&#40;ptrconjugaison++&#41;&#41;;
     
    			printf&#40;"\nImparfait \n"&#41;;
     
    			for&#40;j=0;j<6;j++&#41;
     
    				printf&#40;"%10s%s\n",input,*&#40;ptrconjugaison++&#41;&#41;;
     
    			printf&#40;"\nPasse  \n"&#41;;
     
    			for&#40;j=0;j<6;j++&#41;
     
    				printf&#40;"%10s%s\n",input,*&#40;ptrconjugaison++&#41;&#41;;
     
    			printf&#40;"\nImp.Subjonctif. \n"&#41;;
     
    			for&#40;j=0;j<6;j++&#41;
     
    				printf&#40;"%10s%s\n",input,*&#40;ptrconjugaison++&#41;&#41;;
     
    			printf&#40;"\nPart.Present \n"&#41;;
     
    			for&#40;j=0;j<4;j++&#41;
     
    				printf&#40;"%10s%s\n",input,*&#40;ptrconjugaison++&#41;&#41;;
     
    			printf&#40;"\nPart.Passe \n"&#41;;
     
    			for&#40;j=0;j<4;j++&#41;
     
    				printf&#40;"%10s%s\n",input,*&#40;ptrconjugaison++&#41;&#41;;
     
    		&#125;
     
    		// =======================================		
     
    		printf&#40;"\n\nSaisissez un verbe &#40;N pour quitter&#41; &#58;"&#41;;
     
    		again = getchar&#40;&#41;;
     
    		fflush&#40;stdin&#41;;  
     
    	&#125;
     
    	printf&#40;"\nAu revoir!!\n\n"&#41;;		
     
    &#125;
    Lorsqu'on execute le programme les résultats sont aléatoires, je pense que c'est du à la
    la fonction gets (qui est je sais dépréciée) que j'aimerais remplacer par fgets mais je ne sais quelle syntaxe utiliser.
    Sinon je n'es pas réussi à mettre les pronoms au début de chaque verbe, si quelqu'un à une astuce merci!

  2. #2
    Expert confirmé
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 4 062
    Points
    4 062
    Par défaut
    Des tableaux a plusieurs dimensions seraient plus appropriés:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    const char *prem_conjugaison&#91;&#93;&#91;6&#93;=&#123;&#123;"e",...,"ent"&#125;,...&#125;;
    Pour acceder aux terminaisons du présent:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    prem_conjugaison&#91;1&#93;&#91;1&#93;...
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  3. #3
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Lorsqu'on execute le programme les résultats sont aléatoires, je pense que c'est du à la la fonction gets (qui est je sais dépréciée) que j'aimerais remplacer par fgets mais je ne sais quelle syntaxe utiliser.
    Sinon je n'es pas réussi à mettre les pronoms au début de chaque verbe, si quelqu'un à une astuce merci!
    Pour fgets, tu fais comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fgets&#40;input,sizeof input,stdin&#41;
    et tu testes le retour (doit être différent de NULL).

    Ensuite pour tes pronoms, crée une autre table avec les pronoms et change ton affichage:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf&#40;"%s %10s%s\n",pronoms&#91;j&#93;,input,*&#40;ptrconjugaison++&#41;&#41;;
    Jc

  4. #4
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par fearyourself
    Pour fgets, tu fais comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fgets&#40;input,sizeof input,stdin&#41;
    et tu testes le retour (doit être différent de NULL).
    Après, il faut retirer proprement le '\n', purger..

    http://emmanuel-delahaye.developpez.com/inputs.htm
    Ensuite pour tes pronoms, crée une autre table avec les pronoms et change ton affichage:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf&#40;"%s %10s%s\n",pronoms&#91;j&#93;,input,*&#40;ptrconjugaison++&#41;&#41;;
    Il faut gérer le cas <<je>> vs <<j'>> ...
    Pas de Wi-Fi à la maison : CPL

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 157
    Points : 66
    Points
    66
    Par défaut
    Merci pour vos réponses!
    En ce qui concerne les pronoms c'est parfait ça marche, parcontre j'ai une erreur lorsque j'utilise fgets. Je bloque au niveau du test de retour
    J'ai tenté ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    while&#40;again!='n' && again!='N'&#41;
             &#123;
    		printf&#40;"\nChoisissez un verbe à conjuguer &#58; "&#41;;
    	 if &#40;fgets&#40;input,sizeof input,stdin&#41; != NULL&#41;
                 &#123;
    		if&#40;!viregulier&#40;input&#41;&#41;
    		&#123;
    			ptr = &input&#91;strlen&#40;input&#41;-2&#93;;
    			if&#40;strcmp&#40;ptr,er&#41;==0&#41;					
    				ptrconjugaison = prem_conjugaison;
    		else if&#40;strcmp&#40;ptr,re&#41;==0&#41;		
    			ptrconjugaison = deux_conjugaison;
     
    		else if&#40;strcmp&#40;ptr,ir&#41;==0&#41;
    			ptrconjugaison = trois_conjugaison;
                     &#125;
     
    			else
    			&#123;			
    				printf&#40;"Verbe incorrect"&#41;;
    				printf&#40;"\nChoisissez un autre verbe &#40;N pour quitter&#41; &#58;"&#41;;
    				again = getchar&#40;&#41;;
    				fflush&#40;stdin&#41;;  
    				continue;
    			&#125;				 
    			printf&#40;"\nInfinitif  %s\n\n",ptr&#41;;
    			input&#91;strlen&#40;input&#41;-2&#93;='\0';
    			strcpy&#40;output,input&#41;;
    			printf&#40;"\nPresent \n"&#41;;
    			for&#40;j=0;j<6;j++&#41;
    			printf&#40;"%10s%s\n",pronoms&#91;j&#93;,input,*&#40;ptrconjugaison++&#41;&#41;;
    		&#125;
    		// =======================================		
    		printf&#40;"\n\nSaisissez un verbe &#40;N pour quitter&#41; &#58;"&#41;;
    		again = getchar&#40;&#41;;
    		fflush&#40;stdin&#41;;  
    	&#125;
    	printf&#40;"\nAu revoir!!\n\n"&#41;;		
    &#125;

    [Balise code corrigé par fearyourself]

  6. #6
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par maniolo
    parcontre j'ai une erreur lorsque j'utilise fgets. Je bloque au niveau du test de retour
    Quelle erreur ? Ca veut dire quoi "je bloque" ?
    Pas de Wi-Fi à la maison : CPL

  7. #7
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par maniolo
    Merci pour vos réponses!
    En ce qui concerne les pronoms c'est parfait ça marche, parcontre j'ai une erreur lorsque j'utilise fgets. Je bloque au niveau du test de retour
    N'oublie pas le commentaire important d'Emmanuel:

    Après, il faut retirer proprement le '\n', purger..
    Pour le moment, tu ne le fais pas,

    Jc

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 157
    Points : 66
    Points
    66
    Par défaut
    bonjour à tous !
    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. Emmanuel 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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
     
    #include<stdio.h>
    #include<string.h>
     
    const char *irregulier&#91;&#93;=&#123;"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"&#125;;
     
     
    const char *prem_conjugaison&#91;&#93;=&#123; "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"&#125;;
     
    const char *deux_conjugaison&#91;&#93;=&#123;"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"&#125;;
     
    const char *trois_conjugaison&#91;&#93;=&#123;"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"&#125;;
    char * pronoms&#91;6&#93;=&#123;"je","tu","il/elle","nous","vous","ils/elles"&#125;;
     
    int viregulier&#40;char *input&#41;
    &#123;
           FILE *fptr;
    	int i=0;
    	char buffer;
    	char *extension=".txt";  
    	char nomfichier&#91;100&#93;;
     
    	for&#40;i=0;i<sizeof&#40;irregulier&#41;/sizeof&#40;char*&#41;;i++&#41;
     
    	&#123;
    		if&#40;strcmp&#40;input,*&#40;irregulier+i&#41;&#41;==0&#41;
     
    		&#123;
    			strcpy&#40;nomfichier,input&#41;;
     
    			strcat&#40;nomfichier,extension&#41;;
     
    			printf&#40;"%s",nomfichier&#41;;
     
    			if&#40;&#40;fptr = fopen&#40;nomfichier, "rt"&#41;&#41; == NULL&#41;		
     
    			&#123;
     
    				printf&#40;"Désolé nous n'avons pas ce verbe"&#41;;
     
    				return 1;
    			&#125;			
     
    			while&#40;&#40;buffer = fgetc&#40;fptr&#41;&#41;!=EOF&#41;
    			putchar&#40;buffer&#41;;
    			fclose&#40;fptr&#41;;			
    			return 1;
    		&#125;		
    	&#125;	
    	return 0;
    &#125;;
     
     main&#40;&#41;
    &#123;		
    	char *er = "er";
    	char *re = "re";
    	char *ir = "ir";
    	char input&#91;200&#93;;
            char output&#91;200&#93;;    
    	const char **ptrconjugaison;	
    	char *ptr; 
    	char again = 0;
    	int i=0,j=0;	
     
    	while&#40;again!='n' && again!='N'&#41;
    	&#123;
    		printf&#40;"\nChoisissez un verbe a conjuguer &#58; "&#41;;
    		scanf&#40;"%s",input&#41;;
    		if&#40;!viregulier&#40;input&#41;&#41;
    		&#123;
     
    			ptr = &input&#91;strlen&#40;input&#41;-2&#93;;
     
    			if&#40;strcmp&#40;ptr,er&#41;==0&#41;					
    				ptrconjugaison = prem_conjugaison;
     
    			else if&#40;strcmp&#40;ptr,re&#41;==0&#41;		
    				ptrconjugaison = deux_conjugaison;
     
    			else if&#40;strcmp&#40;ptr,ir&#41;==0&#41;
    				ptrconjugaison = trois_conjugaison;
     
    			printf&#40;"\nInfinitif  %s\n\n",ptr&#41;;
     
    			input&#91;strlen&#40;input&#41;-2&#93;='\0';
     
    			strcpy&#40;output,input&#41;;
     
    			printf&#40;"\nPresent &#58;\n"&#41;;
     
    			for&#40;j=0;j<6;j++&#41;
     
    				printf&#40;"%10s  %s%s\n",pronoms&#91;j&#93;,input,*&#40;ptrconjugaison+&#41;&#41;;
     
    			printf&#40;"\nSubjonctif &#58;\n"&#41;;
     
    			for&#40;j=0;j<6;j++&#41;
     
    				printf&#40;"%10s  %s%s\n",pronoms&#91;j&#93;,input,*&#40;ptrconjugaison++&#41;&#41;;
     
    			printf&#40;"\nFutur &#58;\n"&#41;;
     
    			for&#40;j=0;j<6;j++&#41;
     
    				printf&#40;"%10s  %s%s\n",pronoms&#91;j&#93;,input,*&#40;ptrconjugaison++&#41;&#41;;
     
    			printf&#40;"\nConditionel  &#58;\n"&#41;;
     
    			for&#40;j=0;j<6;j++&#41;
     
    				printf&#40;"%10s  %s%s\n",pronoms&#91;j&#93;,input,*&#40;ptrconjugaison++&#41;&#41;;
     
    			printf&#40;"\nImparfait &#58;\n"&#41;;
     
    			for&#40;j=0;j<6;j++&#41;
     
    				printf&#40;"%10s  %s%s\n",pronoms&#91;j&#93;,input,*&#40;ptrconjugaison++&#41;&#41;;
     
    			printf&#40;"\nPasse  &#58;\n"&#41;;
     
    			for&#40;j=0;j<6;j++&#41;
     
    				printf&#40;"%10s  %s%s\n",pronoms&#91;j&#93;,input,*&#40;ptrconjugaison++&#41;&#41;;
     
    			printf&#40;"\nImparfait du Subjonctif &#58;\n"&#41;;
     
    			for&#40;j=0;j<6;j++&#41;
     
    				printf&#40;"%10s  %s%s\n",pronoms&#91;j&#93;,input,*&#40;ptrconjugaison++&#41;&#41;;
     
    			printf&#40;"\nParticipe Present &#58;\n"&#41;;
     
    			for&#40;j=0;j<4;j++&#41;
     
    				printf&#40;"%10s %s%s\n",pronoms&#91;j&#93;,input,*&#40;ptrconjugaison++&#41;&#41;;
     
    			printf&#40;"\nParticipe Passe &#58;\n"&#41;;
     
    			for&#40;j=0;j<4;j++&#41;
     
    				printf&#40;"%10s %s%s\n",pronoms&#91;j&#93;,input,*&#40;ptrconjugaison++&#41;&#41;;
     
    		&#125;	
    	&#125;
    	printf&#40;"\nAu revoir!!\n\n"&#41;;		
    &#125;

  9. #9
    Expert confirmé
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 4 062
    Points
    4 062
    Par défaut
    Avec fgets c'est mieux:

    au lieu de faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    scanf&#40;"%s",input&#41;;
    il suffit de faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fgets&#40;input,200,stdin&#41;;
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  10. #10
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par seriousme
    Avec fgets c'est mieux:

    au lieu de faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    scanf&#40;"%s",input&#41;;
    il suffit de faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fgets&#40;input,200,stdin&#41;;
    Et comme on l'a déjà signalé, enlever le '\n'...

    Jc

  11. #11
    Expert confirmé
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 4 062
    Points
    4 062
    Par défaut
    Et comme on l'a déjà signalé, enlever le '\n'...
    Pourtant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    void f&#40;char t&#91;&#93;&#41;&#123;
         for&#40;int i=0;i<10;cout<<&#40;int&#41;&#40;t&#91;i&#93;&#41;<<endl,i++&#41;;
         &#125;
     
     
     
    int main&#40;&#41;
    &#123;
    char t&#91;10&#93;;
    fgets&#40;t,10,stdin&#41;;
    f&#40;t&#41;;
    n'affiche pas 10 qui est le code ascii de '\n'.

    Pourquoi?
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  12. #12
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par seriousme
    Et comme on l'a déjà signalé, enlever le '\n'...
    Pourtant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    void f&#40;char t&#91;&#93;&#41;&#123;
         for&#40;int i=0;i<10;cout<<&#40;int&#41;&#40;t&#91;i&#93;&#41;<<endl,i++&#41;;
         &#125;
     
     
     
    int main&#40;&#41;
    &#123;
    char t&#91;10&#93;;
    fgets&#40;t,10,stdin&#41;;
    f&#40;t&#41;;
    n'affiche pas 10 qui est le code ascii de '\n'.

    Pourquoi?
    Premièrement c'est du C++ avec le cout, mais moi j'obtiens ceci (avec la version C++ et la version C...):

    bonjour
    98
    111
    110
    106
    111
    117
    114
    10
    0
    64
    Jc

  13. #13
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par seriousme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fgets&#40;input,200,stdin&#41;;
    Bof...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
       char input&#91;200&#93;;
       ...
       fgets&#40;input, sizeof input, stdin&#41;;
    en ensuite, il faut gérer le '\n' et la purge de stdin...

    http://emmanuel-delahaye.developpez.com/inputs.htm
    Pas de Wi-Fi à la maison : CPL

  14. #14
    Expert confirmé
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 4 062
    Points
    4 062
    Par défaut
    Premièrement c'est du C++ avec le cout, mais moi j'obtiens ceci (avec la version C++ et la version C...):



    bonjour
    98
    111
    110
    106
    111
    117
    114
    10
    0
    64
    en effet j'ai testé et pour avoir le '\n' il faut entrer 8 caracteres au plus!

    Pourquoi?

    Est ce qu'il faut "réserver" le 9eme au '\n' et le 10eme au '\0'?
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  15. #15
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par seriousme
    Pourtant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void f&#40;char t&#91;&#93;&#41;&#123;
         for&#40;int i=0;i<10;cout<<&#40;int&#41;&#40;t&#91;i&#93;&#41;<<endl,i++&#41;;
         &#125;
     
    int main&#40;&#41;
    &#123;
    char t&#91;10&#93;;
    fgets&#40;t,10,stdin&#41;;
    f&#40;t&#41;;
    n'affiche pas 10 qui est le code ascii de '\n'.
    Je ne sais pas ce qu'est ce charabia, et je ne veux pas le savoir, mais ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    #include <stdio.h>
     
    void f&#40;char const *t&#41;
    &#123;
       char const *p = t;
     
       for &#40;p = t; *p != 0; p++&#41;
       &#123;
          printf &#40;"%d\n", *p&#41;;
       &#125;
    &#125;
     
    int main&#40;void&#41;
    &#123;
       char t&#91;10&#93;;
     
       fgets&#40;t, sizeof t, stdin&#41;;
       f&#40;t&#41;;
     
       return 0;
    &#125;
    fait ce quil faut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    aze
    97
    122
    101
    10
    Pas de Wi-Fi à la maison : CPL

  16. #16
    Expert confirmé
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 4 062
    Points
    4 062
    Par défaut
    He c'est cool:

    En rentrant 9 caracteres pas de '\n' à virer!

    EDIT:quand il tronque la chaine il vire le '\n' tout seul!
    c'est pas beau ça!
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  17. #17
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par seriousme
    en effet j'ai testé et pour avoir le '\n' il faut entrer 8 caracteres au plus!
    C'est tout le principe de fgets(). Il suffit de lire ton livre de C, c'est expliqué.
    Pas de Wi-Fi à la maison : CPL

  18. #18
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par seriousme
    He c'est cool:

    En rentrant 9 caracteres pas de '\n' à virer!
    C'est pas cool du tout. Le '\n' est resté dans stdin et le prochain appel de fgets() va encore nous valoir un tas de courrier...

    Il faut détecter la présence du '\n'. Si on le trouve on l'élimine. Si on ne le trouve pas, on purge.

    C'est expliqué en long et en large sur mon site . J'ai passé les liens 40000 fois... Tu t'obstines à vouloir faire le malin et à ne pas vouloir progresser. C'est lamentable...
    Pas de Wi-Fi à la maison : CPL

  19. #19
    Expert confirmé
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 4 062
    Points
    4 062
    Par défaut
    [t'enerve pas je déconne]
    Il suffit de lire ton livre de C
    Quel livre de C?
    [/t'enerve pas je déconne]
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  20. #20
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 157
    Points : 66
    Points
    66
    Par défaut
    Bonjour à tous. Après avoir fait un tour sur la profusion de questions autour de fgets dans le forum, je me devais de remplacer mon scanf. Cependant, même si cela fonctionne je me demande s'il n'y a pas plus simple. En effet cela me rajoute une dizaine de lignes de code...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
    main&#40;&#41;
    &#123;			
    	char *er = "er";
    	char *re = "re";
    	char *ir = "ir";
    	char input&#91;200&#93;;
            char output&#91;200&#93;;    
    	const char **ptrconjugaison;	
    	char *ptr; 
    	char again = 0;
    	int i=0,j=0;	
    	while&#40;again!='n' && again!='N'&#41;
    	&#123;
    		printf&#40;"\nChoisissez un verbe a conjuguer &#58; "&#41;;
    	        fflush &#40;stdout&#41;;/* Pour afficher le message tout de suite */
                    fgets &#40;input, sizeof input, stdin&#41;;
       		&#123;
         		 char *pt = strchr &#40;input, '\n'&#41;;
    	 if &#40;pt != NULL&#41;
         		   &#123;
           		    *pt = 0;
         		    &#125;
          		   else
          		      &#123;
          		      int c;
          		      while &#40;&#40;c = fgetc &#40;stdin&#41;&#41; != '\n' && c != EOF&#41;
         		           &#123;
           		            &#125;
        		      &#125;
       		  &#125;
     
    		if&#40;!viregulier&#40;input&#41;&#41;
    		&#123;
    			ptr = &input&#91;strlen&#40;input&#41;-2&#93;;
     
    			if&#40;strcmp&#40;ptr,er&#41;==0&#41;					
    				ptrconjugaison = prem_conjugaison;
    			else if&#40;strcmp&#40;ptr,re&#41;==0&#41;		
    				ptrconjugaison = deux_conjugaison;
    			else if&#40;strcmp&#40;ptr,ir&#41;==0&#41;
    				ptrconjugaison = trois_conjugaison;
                                    printf&#40;"\nInfinitif  %s\n\n",ptr&#41;;
     
    			input&#91;strlen&#40;input&#41;-2&#93;='\0';
    			strcpy&#40;output,input&#41;;
    			printf&#40;"\nPresent &#58;\n"&#41;;
    			for&#40;j=0;j<6;j++&#41;
    	printf&#40;"%10s   %s%s\n",pronoms&#91;j&#93;,input,*&#40;ptrconjugaison++&#41;&#41;;
    	&#125;
    	printf&#40;"\nAu revoir!!\n\n"&#41;;		
    &#125;

Discussions similaires

  1. Réponses: 1
    Dernier message: 04/08/2010, 12h36
  2. [Débutant] Lenteur de completion avec les .jsp
    Par Rakken dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 20/12/2007, 15h06
  3. [Cognos 6][Impromptu] Problème avec les champs groupés
    Par nicoduhavre dans le forum Cognos
    Réponses: 4
    Dernier message: 23/03/2007, 16h27
  4. [débutant] faire un JAR avec les drivers JDBC
    Par korrigann dans le forum Eclipse Java
    Réponses: 6
    Dernier message: 29/11/2006, 17h46
  5. Réponses: 2
    Dernier message: 01/08/2006, 14h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo