donc je dois reprendre tout mon code en utilisant fprintf et fscan uniquement sans fwrite et fread ?
parceque je veux que mon code soit lisible , mais est ce que fgets est convenable aussi ?
donc je dois reprendre tout mon code en utilisant fprintf et fscan uniquement sans fwrite et fread ?
parceque je veux que mon code soit lisible , mais est ce que fgets est convenable aussi ?
Ce n'est pas parce que tu utilises fscanf() au lieu de fread() que ton code sera plus lisible. Pire, chaque fonction a un but particulier et si tu utilises une fonctionX pour effectuer une action qui n'est pas celle pour laquelle elle a été écrite (et pour laquelle il existe une fonctionY) tu devras "magouiller" pour l'adapter ce qui rendra ton code encore moins lisible.
Exemple: lire une ligne d'un fichier en utilisant fgetc
Code c : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 char ligne[100]; char c; int i=0; do { c=fgetc(fp); ligne[i++]=c; } while (c != '\n'); ligne[i]=0;
Exemple: lire une ligne d'un fichier en utilisant fread
Code c : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 char ligne[100]; char c; int i=0; do { fread(&c, sizeof(char), 1, fp); ligne[i++]=c; } while (c != '\n'); ligne[i]=0;
Exemple: lire une ligne d'un fichier en utilisant fgets
Code c : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 char ligne[100]; fgets(ligne, 100, fp);
Quel code est le plus lisible ???
Tout code est lisible s'il est écrit de façon lisible. Aéré, avec des commentaires en tête de chaque bloc expliquant ce que tu vas faire, etc
Mon Tutoriel sur la programmation «Python»
Mon Tutoriel sur la programmation «Shell»
Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
Et on poste ses codes entre balises [code] et [/code]
je pense que je vais garder et essayer d'harmoniser le code source .
je vais me pencher sur les autres fonctions pour la modification et la suppression ; réorganiser le code et vous montrez
problème a ce niveau quand j’essaie d'utiliser cette fonction dans mon main , rien ne s'affiche , aucun donné entrée.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 case 2: afficherInfo(fp,-1); break;
Tu as 3 possibilités
- la fonction n'est pas appelée
- le fscanf() renvoie un nombre <= 0
- le test sur le matricule est toujours vrai
En mettant du printf() aux bons endroits, tu pourras détecter laquelle de ces 3 possibilités est la bonne pour la réparer. Ben oui, faut pas te contenter de regarder ton code et d'attendre que ça te tombe tout cuit dans le bec. Faut aussi réfléchir et investiguer...
Mon Tutoriel sur la programmation «Python»
Mon Tutoriel sur la programmation «Shell»
Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
Et on poste ses codes entre balises [code] et [/code]
Oui, sur le papier cette fonction "fonctionne". D'ailleurs tu n'as même pas besoin de moi pour le voir: soit tu l'appelles avec matricule=-1 et dans ce cas le test étant toujours faux le continue ne se fait pas et tous les ouvriers sont alors affichés ; soit tu l'appelles avec un matricule X et dans ce cas la première partie du test étant toujours vraie, seule la seconde partie du test est prise en considération c.a.d. quand le matricule lu est différent du matricule saisi. A ce moment là, le test devient faux pour un seul ouvrier qui est alors affiché.
Ce qui permet de descendre les possibilités à seulement 2 hypothèses:
- la fonction n'est pas appelée (le case 2 ne passe pas)...
- le fscanf() renvoie un nombre <= 0
...
Mon Tutoriel sur la programmation «Python»
Mon Tutoriel sur la programmation «Shell»
Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
Et on poste ses codes entre balises [code] et [/code]
c'est ainsi que j'ai procede
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 #include<stdio.h> #include <stdlib.h> /*structure utilise*/ struct employe { int matricule; char nom[50]; char prenom [50]; char sexe[2]; char nomfichier[30]; } ; /*fonction pour afficher les informations*/ void afficherInfo(FILE*fichier, int matricule) { struct employe E; long pos=ftell(fichier); rewind(fichier); while(fscanf(fichier,"%d\n%s\n%s\n%s\n%d\n",&E.matricule,E.nom,E.prenom,E.sexe)>0) { if (matricule != -1 && E.matricule != matricule) continue; printf("matricule: %d\n ",E.matricule); printf("Nom et prenom:,%s %s\n",E.nom,E.sexe); printf("sexe: %s\n",E.sexe); } fseek(fichier, pos, SEEK_SET); } /*fonction pour ajouter des donnees aux fichiers */ void ajout(FILE*fichier) { char nomfichier[30]; employe E; fichier=fopen(nomfichier,"w"); printf("saississez le numero matricule"); scanf("%d",E.matricule); printf("nom :"); scanf("%s",E.prenom); printf("sexe :"); scanf("%s",E.sexe); fprintf(fichier, "%d %s %s %s \n",E.matricule,&E.nom,&E.prenom,&E.sexe); fclose(fichier); } /*fonction pour supprimer une donnee */ /*programme principal*/ main() { employe E; int i,n; char nomfichier[30]; FILE *fichier ; printf("Entrez le nom du fichier :\n "); scanf("%s", nomfichier); fichier=fopen(nomfichier,"w"); for ( i=0 ;i<4;i++) { printf("employe Numero %d \n ",i+1); printf("entrez votre matricule SVP \n"); scanf("%d", E.matricule); printf("entrez votre nom SVP \n"); scanf("%s", & E.nom); printf("entrez votre prenom svp\n"); scanf("%s", &E.prenom); printf("sexe M/F \n"); scanf("%s", &E.sexe); fprintf(fichier, "%d %s %s %s \n",E.matricule,&E.nom,&E.prenom,&E.sexe); }/*fermetture du fichier */ fclose(fichier); printf("------------menu--------------------------------------\n"); printf("1-ajouter un employe a la liste \n"); printf("2-affichage de tous les enregistrements de ce fichier \n"); printf("3-modification des informations d'un employe' \n"); printf("4-consultation a partir du matricule "); printf("5-supprimer une info grace a son matricule \n"); printf("------------------------------------------------------\n"); scanf("%d",&n); switch(n) { case 1: ajout(fp); break; case 2: afficherInfo(fp,-1); break; case 3: break; case 4: break; } return 0; }
Pfff ton code ne compile même pas. Je me demande alors comment tu peux faire pour dire que ça ne fonctionne pas !!!
Maintenant tu réfléchis à tout ce qui t'a été dit tout en corrélant ça dans ta tête à tout ce que tu as déjà écrit, ce qui donne (en vrac) les éléments de réflexion suivants (je parle ici pour toi)
- pourquoi j'ouvre mon fichier en mode "w" si je veux le relire ?
- pourquoi je ferme mon fichier avant d'avoir fini de travailler dedans (et en plus je le ferme 2 fois) ?
- pourquoi tantôt je mets du "&", tantôt je n'en mets pas, pour les mêmes éléments ?
- pourquoi j'écris mes infos sur une seule ligne mais je tente de les lire comme si elles étaient écrites sur n lignes ?
- pourquoi, quand ceux qui me répondent et qui utilisent leurs propres conventions de nommage (telle que "fp" pour "file pointeur") ne suis-je pas capable de comprendre de quoi il s'agit et de raccorder ça à ma propre façon de nommer ce "file pointeur" ?
Et surtout tu arrêtes de faire ta faignasse et tu bosses au lieu d'attendre que les autres bossent pour toi !!!
PS: au fait, j'avais raison ; l'une de mes deux hypothèses était bien la bonne: le fscanf() renvoyait bien -1...
Mon Tutoriel sur la programmation «Python»
Mon Tutoriel sur la programmation «Shell»
Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
Et on poste ses codes entre balises [code] et [/code]
Partager