Bonjour à tous.

Je travail actuellement sur un dictionnaire de mot. L'écriture et la lecture de mon fichier ne me pose pas de problème.

J'essaie en vain de trier mon fichier mais celui n'ai pas trié ou alors partiellement ..

Pour ce qui est l'environnement et la compilation je travail sous linux et je compil avec gcc -Wall ect ...

Voici les fonctions que j'utilise pour le tri :

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
/**
*  Renvoie le nombre de ligne du fichier
**/
int nombre_lignes()
{
	FILE* monFichier = NULL;
	char motLu[LENGTH_MOT_MAX];
	int nbLignes = 0;
 
	monFichier = fopen("dictionnaires.txt", "r");
	if(monFichier == NULL)
	{
		return 0;
	}
 
	while(fgets(motLu, LENGTH_MOT_MAX, monFichier) != NULL)
	{
		nbLignes++;
	}
 
	fclose(monFichier);
 
	return nbLignes;
}
 
/**
*  Compare 2 chaînes de caractère
**/
int compareString(const void* str1, const void* str2)
{
	// renvoie 0 si chaîne identique
	// renvoie un nombre positif si les caractères de la chaîne 1 sont supérieur à ceux de la chaîne 2
	// renvoie un nombre négatif sinonn
 
 	return strcmp((char*)(str1), (char*)(str2) );
}
 
/**
* Tri du fichier par ordre croissant
**/
void tri_dico()
{
	FILE *monFichier = NULL;
	monFichier = fopen("dictionnaires.txt", "r");
	char motLu[LENGTH_MOT_MAX];
	char **tableauDeMot; // Tableau de tableau de char
	int nb_lignes = 0;
	int i, j = 0;
 
	if(monFichier == NULL)
		printf("Problème lors de la lecture du fichier");
	else
	{
		nb_lignes = nombre_lignes();
 
		// Allocation mémoire pour l'ensemble des nb_lignes du fichiers
		if(nb_lignes > 0)
			tableauDeMot = malloc(nb_lignes * sizeof(char *));
		if(tableauDeMot == NULL)
			printf("Erreur");
		else
		{
			// Allocation mémoire des i lignes du fichiers
			for(i=0;i<nb_lignes;i++)
			{
				tableauDeMot[i] = malloc(LENGTH_MOT_MAX * sizeof(char));
				if(tableauDeMot[i] == NULL)
					printf("Erreur");
			}
 
			// Copie des mots dans le tableau
			while(fgets(motLu, LENGTH_MOT_MAX, monFichier) != NULL)
			{
				strcpy(tableauDeMot[j], motLu);
				j++;
			}
 
			fclose(monFichier);
 
			qsort(tableauDeMot, nb_lignes, sizeof(*tableauDeMot), compareString);
 
			for(i=0;i<nb_lignes;i++)
				printf("%s", tableauDeMot[i]);	
		}
	}
	// On libère la mémoire
	for(i=0;i<nb_lignes;i++)
	{
		free(tableauDeMot[i]);
	}
 
	free(tableauDeMot);
}
En vous remerciant de votre aide.