Bonjour à tous je souhaite faire un programme qui me permet de traduire des mots du français à l'italien.

Voici comment se présente mon dictionnaire :

abaissement [n.m] - recessione [n]
abaisser [vblex] - abbassare [vblex]
abandon [n] - abbandono [n]
abandonner [vblex] - abbandonare [vblex]
abattement [n] - abbattimento [n.m]
abattre [vblex] - abbattere [vblex]

Voici mon code en C :

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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
 
#define MAX_MOT_TAILLE 100
#define MAX_DICTIONNAIRE_TAILLE 100
 
typedef struct {
char mot_fr[MAX_MOT_TAILLE];
char mot_it[MAX_MOT_TAILLE];
} DictionnaireElement;
 
DictionnaireElement* lire_dictionnaire(char* nom_fichier, int* taille) {
FILE* fichier = fopen(nom_fichier, "r");
if (fichier == NULL) {
printf("Erreur lors de l'ouverture du fichier %s.\n", nom_fichier);
exit(1);
}
 
DictionnaireElement* dictionnaire = malloc(MAX_DICTIONNAIRE_TAILLE * sizeof(DictionnaireElement));
if (dictionnaire == NULL) {
printf("Erreur lors de l'allocation de mémoire.\n");
exit(1);
}
 
*taille = 0;
char ligne[MAX_MOT_TAILLE * 2];
while (fgets(ligne, sizeof(ligne), fichier) != NULL && *taille < MAX_DICTIONNAIRE_TAILLE) {
char mot_fr[MAX_MOT_TAILLE], mot_it[MAX_MOT_TAILLE];
if (sscanf(ligne, "%99[^-] - %99[^\n]", mot_fr, mot_it) == 2) {
strcpy(dictionnaire[*taille].mot_fr, mot_fr);
strcpy(dictionnaire[*taille].mot_it, mot_it);
(*taille)++;
} else {
printf("Erreur de lecture de la ligne du dictionnaire.\n");
}
}
 
fclose(fichier);
return dictionnaire;
}
 
char* traduire_texte(char* texte, DictionnaireElement* dictionnaire, int taille) {
char* mots = strtok(texte, " ");
char* texte_traduit = malloc(MAX_MOT_TAILLE * 100);
texte_traduit[0] = '\0';
 
while (mots != NULL) {
// Convert the current word to lowercase
for (int j = 0; mots[j]; j++) {
mots[j] = tolower(mots[j]);
}
 
int traduit = 0;
for (int i = 0; i < taille; i++) {
if (strcasecmp(mots, dictionnaire[i].mot_fr) == 0) {
strcat(texte_traduit, dictionnaire[i].mot_it);
strcat(texte_traduit, " ");
traduit = 1;
break;
}
}
if (!traduit) {
strcat(texte_traduit, mots);
strcat(texte_traduit, " ");
}
mots = strtok(NULL, " ");
}
 
return texte_traduit;
}
 
int main() {
char nom_fichier_dictionnaire[100];
printf("Entrez le nom du fichier du dictionnaire bilingue : ");
fgets(nom_fichier_dictionnaire, sizeof(nom_fichier_dictionnaire), stdin);
nom_fichier_dictionnaire[strcspn(nom_fichier_dictionnaire, "\n")] = '\0';
 
int taille_dictionnaire;
DictionnaireElement* dictionnaire = lire_dictionnaire(nom_fichier_dictionnaire, &taille_dictionnaire);
 
while (1) {
char texte_a_traduire[MAX_MOT_TAILLE * 100];
printf("Entrez le texte à traduire en français (ou 'sortir' pour quitter) : ");
fgets(texte_a_traduire, sizeof(texte_a_traduire), stdin);
texte_a_traduire[strcspn(texte_a_traduire, "\n")] = '\0'; // Removing newline character
 
if (strcmp(texte_a_traduire, "sortir") == 0) {
printf("Au revoir!\n");
break;
}
 
char* texte_traduit = traduire_texte(texte_a_traduire, dictionnaire, taille_dictionnaire);
printf("Texte traduit en italien: %s\n\n", texte_traduit);
free(texte_traduit);
}
 
free(dictionnaire);
return 0;
}
Quand je l'exécute j'ai ceci :

Entrez le nom du fichier du dictionnaire bilingue : francais-italien_snp.tab
Entrez le texte à traduire en français (ou 'sortir' pour quitter) : maison
Texte traduit en italien: maison

Entrez le texte à traduire en français (ou 'sortir' pour quitter) : casa
Texte traduit en italien: casa


Donc ça ne fonctionne pas.

Pourriez-vous me dire ce qui bloque ? Merci pour votre aide.