le code ne marche pas![]()
le code ne marche pas![]()
Mais encore ?
Merci d'éviter ce genre d'expression seule qui ne mène à rien, surtout pas à connaître le vrai comportement et pouvoir de ce fait t'aider efficacement.
j'ai résolu mon problème,merci pour vos interventions,maintennat je veux savoir si il ya une possibilité de trier un ensembles de mots dans un fichier binaire
Bonjour à tous.
Quand on résoud son problème, on est prié de dire comment.
Définit un tableau/une liste doublement chainé, et applique dessus un algorithme de tri.
Demande à notre-ami-à-tous ce qu'il pense de quicksort.
Par ailleurs, notre réglement nous interdit de faire les exercices des étudiants, donc, dis nous ce qui te bloque, code à l'appui, pour que nous puissions te débloquer.
Mes principes de bases du codeur qui veut pouvoir dormir:Pour faire des graphes, essayez yEd.
- Une variable de moins est une source d'erreur en moins.
- Un pointeur de moins est une montagne d'erreurs en moins.
- Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
- jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
- La plus sotte des questions est celle qu'on ne pose pas.
le ter nel est le titre porté par un de mes personnages de jeu de rôle
parce que j'ai crée un code pour trier un fichier,avec les liste chaîné mais ne fonctionne pas quand je veux trier un fichier binaire,par ce que j'ai fait un test comme suit :
j'ai choisit un fichier binaire pour le trier et j'ai choisit de mettre le résulta dans un fichier texte pour que je peux savoir si le programme a fait le travail demandé, et j'ai trouvé que le texte n'est pas trier correctement .
mais quand je choisit la source comme fichier texte et la destination un fichier texte Le résultat est bon.
voila le code:
Code c : 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 #include<stdio.h> #include<stdlib.h> #include<conio.h> #include<string.h> typedef struct liste liste;//definition de la liste struct liste { char ch[100]; liste *next; }; liste* ajout(liste **l,char *t)/*permet l'ajout d'une mot a la liste (ajout en tete)*/ { liste *p; p=(liste *) malloc(sizeof(liste)); strcpy(p->ch,t); p->next=*l; *l=p; } liste* charger(liste **l)/*permet de charger les mots de la fichier dans une liste*/ { FILE *fp; char t[100],s[100]; puts("dooner le nom de fichier source(a trier)"); retour: gets(s); fp=fopen(s,"rb"); if(!fp) { puts("\ncette fichier n'existe pas"); puts("si vous desirer resseayer tappuiez sur entrer sinon autre caractere puis entrer"); if(getchar()=='\n') { puts("donner le nom de fichier source(a trier)"); goto retour; } else exit(0); } while(fgets(t,100,fp)) ajout(l,t); } void liberer(liste *l)// liberer la liste { liste *p,*t; for(p=l;p;) { t=p->next; free(p); p=t; } } FILE* remplir(char *s,liste *l)/*permet de remplir le fichier destination*/ { FILE *fp; liste *p=l; fp=fopen(s,"wb"); while(l) { fputs(l->ch,fp); l=l->next; } fclose(fp); liberer(p); } liste* trier(liste **l)// trier une liste { liste *p; char s[100]; if(*l) { for(p=(*l)->next;p;p=p->next) if(strcmp((*l)->ch,p->ch)>0) { strcpy(s,(*l)->ch); strcpy((*l)->ch,p->ch); strcpy(p->ch,s); } trier(&((*l)->next)); } } main() { char s[100]; liste *l=NULL; charger(&l); trier(&l); puts("dooner le nom de fichier destination (triee)"); gets(s); remplir(s,l); puts("merci, consulter votre dossier vous trouverez votre fichier"); getch(); }
Bonjour,
Pourquoi as tu un goto en arriere?
Pourquoi utilises-tu gets()?
Les signatures valides de main sont: int main(); ou int main(int argc, char** argv);.
remplir() est fausse, elle retourne un FILE* sans instruction return.
Même problème pour charger, ajout et trier.
Dans trier(), il manque une paire d'accolades pour le for. C'est a priori une question d'explicitation.
Le typedef d'une structure s'écrirait plutot typedef struct s{ } s;Enfin, toutes tes variables on des noms non informatifs.
Par exemple char* s est chouette, on sait que s est une string, sauf que char* filename est beaucoup plus clair quant à son usage.
Par ailleurs, quand tu postes un code, assure-toi d'avoir une indentation correcte.
Tant que tu n'auras pas résolu tout cela, ton programme sera nécessairement faux… pour nous.
Mes principes de bases du codeur qui veut pouvoir dormir:Pour faire des graphes, essayez yEd.
- Une variable de moins est une source d'erreur en moins.
- Un pointeur de moins est une montagne d'erreurs en moins.
- Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
- jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
- La plus sotte des questions est celle qu'on ne pose pas.
le ter nel est le titre porté par un de mes personnages de jeu de rôle
C'est encore moi…
supprime conio.h, vu que tu ne l'utilises pas, ainsi, ton code pourra compiler avec linux (comme c'est mon cas).
Je te suggère aussi d'utiliser une structure de liste triée:
il ne te restera alors qu'a implémenter void ajouter(liste_triee *liste, value_type valeur); pour ajouter au bon endroit dans la liste, et tout sera atrocement simple.
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 typedef char value_type[LIST_NAME_SIZE]; typedef const char const_value_type[LIST_NAME_SIZE]; //definition de la liste typedef struct chainon { value_type contenu; struct chainon *suivant; } chainon; chainon * const liste_vide = NULL; typedef int compare_f(const_value_type, const_value_type); typedef struct liste_triee { chainon* tete; compare_f* compare; } liste_triee; liste_triee nouvelle_liste_triee(compare_f* comparateur) { liste_triee liste = {liste_vide, comparateur}; return liste; }
voici une idée du main que tu peux obtenir avec une telle structure:
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 int main(int argc, char** argv) { if (argc!=3) { printf("trie un fichier de données\n"); printf("usage: %s <source> <dest>\n", argv[0]); return 2; } int status; liste_triee liste = charger(argv[1]); if (est_vide(liste)) { fprintf(stderr, "fichier source manquant ou vide.\n"); return 1; } status = ecrire(liste, argv[2]); liberer_liste_triee(liste); return status; }
Mes principes de bases du codeur qui veut pouvoir dormir:Pour faire des graphes, essayez yEd.
- Une variable de moins est une source d'erreur en moins.
- Un pointeur de moins est une montagne d'erreurs en moins.
- Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
- jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
- La plus sotte des questions est celle qu'on ne pose pas.
le ter nel est le titre porté par un de mes personnages de jeu de rôle
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager