Problème d'affichage
salma88
-
kilian Messages postés 8854 Statut Modérateur -
kilian Messages postés 8854 Statut Modérateur -
Bonjour,
j'ai fait un programme qui permet d'ajouter des informations des stagiaires dans un fichiers , mais si j'ajoute 2 stagiaires et je choisis de les afficher le programme ne m'affiche que les données du premier stagiaire tandis qu'il affecte des valeurs nulles aux informations du 2ème stagiaire !!!! aidez moi slv c'est très urgent !!!
voici le code :::
j'ai fait un programme qui permet d'ajouter des informations des stagiaires dans un fichiers , mais si j'ajoute 2 stagiaires et je choisis de les afficher le programme ne m'affiche que les données du premier stagiaire tandis qu'il affecte des valeurs nulles aux informations du 2ème stagiaire !!!! aidez moi slv c'est très urgent !!!
voici le code :::
# include <stdio.h>
# include <conio.h>
FILE *f;
char fiche[30]="c://stagiaire.txt";
void saisie(void);
void affichage(void);
void enregisTab(void);
void LirTab(void);
void menu(void);
/******************************************/
struct stagiaire
{
char nom[10],prenom[10];
int matricule;
float moyenne;
}T[100] ;
int i=0,n=0;
/******************************************/
void menu(){
printf("____________________Menu_____________________\n");
printf("|1:Saisir les informations d'un stagiaire |\n")
printf("|2:Afficher les informations d'un stagiaire |\n");
printf("|3:Quitter |\n");
/*********************************************/
void main(){int choix;
do{
menu();
printf("Saisir votre choix ...\n");
scanf("%d",&choix);
switch(choix){
case 1:saisie();break;
case 2:affichage();break;
}
}while(choix!=3);
}
/*******************************************/
void saisie(){ int rep;
do{
n++;
printf("saisir le nom du stagiaire\n");
scanf("%s",T[i].nom);
printf("saisir le prenom du stagiaire\n");
scanf("%s",T[i].prenom);
printf("saisir le matricule du stagiaire\n");
scanf("%d",&T[i].matricule);
printf("saisir la moyenne du stagiaire\n");
scanf("%f",&T[i].moyenne);
i++;
printf("voulez vous ajouter un autre stagiaire ?(0/1)\n");
scanf("%d",&rep);
}while(rep!=0);
enregisTab();
}
/*******************************************/
/*void ajout()
{
f=fopen(fiche,"a");
fwrite(&T,sizeof(T),1,f);
fclose(f);
} */
/*******************************************/
void enregisTab()
{
f=fopen(fiche,"w");
fwrite(&T,sizeof(T),n,f);
fclose(f);
}
/*******************************************/
void LirTab(){
int fin,i=0;
f=fopen(fiche,"r");
do{
fin=fread(&T[i],sizeof(T),1,f);
i++;
}while(fin!=0);
fclose(f);
}
/*******************************************/
void affichage()
{
LirTab();
for(i=0;i<n;i++)
{
printf("******************************************\n");
printf(" les informations du stagiaire sont : \n");
printf(" Son nom est :%s\n",T[i].nom);
printf(" Son prenom est :%s\n",T[i].prenom);
printf(" Son matricule est :%d\n",T[i].matricule);
printf(" Sa moyenne est :%f\n",T[i].moyenne);
printf("******************************************\n");
}
enregisTab();
}
A voir également:
- Problème d'affichage
- Affichage double ecran - Guide
- Problème affichage fenêtre windows 10 - Guide
- Problème affichage page internet google chrome ✓ - Forum Google Chrome
- Windows 11 affichage classique - Guide
- Problème d'affichage/bugs graphiques sur Chrome sur Android - Forum Téléphones & tablettes Android
3 réponses
Salut,
A la fin de ta saisie, tu appelles void enregisTab() dans lequel tu fais:
L'ouverture avec "w" efface complètement le fichier, puis tu écris la nouvelle entrée.
Tu devrais ouvrir ton fichier avec l'attribut a.
A la fin de ta saisie, tu appelles void enregisTab() dans lequel tu fais:
f=fopen(fiche,"w"); fwrite(&T,sizeof(T),n,f); fclose(f);
L'ouverture avec "w" efface complètement le fichier, puis tu écris la nouvelle entrée.
Tu devrais ouvrir ton fichier avec l'attribut a.
Non en fait tu as raison, vu que tu enregistres tout d'un coup, autant utiliser w.
Par contre, si tu es sous windows, il faut que tu ajoutes l'option b dans fopen.
C'est à dire au lieu de fopen("machin", "r"), il faut mettre fopen("machin", "rb")
Fait pareil pour w à remplacer par wb.
Par contre, si tu es sous windows, il faut que tu ajoutes l'option b dans fopen.
C'est à dire au lieu de fopen("machin", "r"), il faut mettre fopen("machin", "rb")
Fait pareil pour w à remplacer par wb.
Bon j'ai essayé de le compiler chez moi. Je ne sais même pas comment comment tu as fait pourle compiler vu le nombre d'erreur qu'il y a dedans.
D'abord tu as oublié de fermer l'accolade dans le menu.
Ensuite tes erreurs se situent dans les fread.
Dans enregisTab tu fais fwrite(&T,sizeof(T),n,f);
Je ne vois pas pourquoi tu mets n.
C'est fwrite(&T,sizeof(T),1,f); car tu veux écrire T qui a la taille de 100 tableaux de structure stagiaire.
Ensuite dans LirTab tu as
fin=fread(&T[i],sizeof(T),1,f);
En fait tu lis un membre de T en demandant de lire la taille de T, soit 100 fois ce que tu demandes.
Il faudrais que tu mettes
fread(&T[i],sizeof(struct stagiaire),1,f);
Voilà...chez moi ça marche bien en tout cas (et n'oublie pas les b si tu es sous windows).
D'abord tu as oublié de fermer l'accolade dans le menu.
Ensuite tes erreurs se situent dans les fread.
Dans enregisTab tu fais fwrite(&T,sizeof(T),n,f);
Je ne vois pas pourquoi tu mets n.
C'est fwrite(&T,sizeof(T),1,f); car tu veux écrire T qui a la taille de 100 tableaux de structure stagiaire.
Ensuite dans LirTab tu as
fin=fread(&T[i],sizeof(T),1,f);
En fait tu lis un membre de T en demandant de lire la taille de T, soit 100 fois ce que tu demandes.
Il faudrais que tu mettes
fread(&T[i],sizeof(struct stagiaire),1,f);
Voilà...chez moi ça marche bien en tout cas (et n'oublie pas les b si tu es sous windows).
j'ai modifié le code en prenant en considération votre remarque mais même si, le problème n'était pas résolu
le nouveau code est le suivant :
# include <stdio.h> # include <conio.h> FILE *f; char fiche[30]="c://stagiaire.txt"; void saisie(void); void affichage(void); void enregisTab(void); void LirTab(void); void menu(void); /******************************************/ struct stagiaire { char nom[10],prenom[10]; int matricule; float moyenne; }T[100] ; int i=0,n=0; /******************************************/ void menu(){ printf("____________________Menu_____________________\n"); printf("|1:Saisir les informations d'un stagiaire |\n") printf("|2:Afficher les informations d'un stagiaire |\n"); printf("|3:Quitter |\n"); /*********************************************/ void main(){int choix; do{ menu(); printf("Saisir votre choix ...\n"); scanf("%d",&choix); switch(choix){ case 1:saisie();break; case 2:affichage();break; } }while(choix!=3); } /*******************************************/ void saisie(){ int rep; do{ n++; printf("saisir le nom du stagiaire\n"); scanf("%s",T[i].nom); printf("saisir le prenom du stagiaire\n"); scanf("%s",T[i].prenom); printf("saisir le matricule du stagiaire\n"); scanf("%d",&T[i].matricule); printf("saisir la moyenne du stagiaire\n"); scanf("%f",&T[i].moyenne); i++; printf("voulez vous ajouter un autre stagiaire ?(0/1)\n"); scanf("%d",&rep); }while(rep!=0); ajout(); } /*******************************************/ void ajout() { f=fopen(fiche,"a"); fwrite(&T,sizeof(T),n,f); fclose(f); } /*******************************************/ /*void ajout() { f=fopen(fiche,"a"); fwrite(&T,sizeof(T),1,f); fclose(f); } */ /*******************************************/ void enregisTab() { f=fopen(fiche,"w"); fwrite(&T,sizeof(T),n,f); fclose(f); } /*******************************************/ void LirTab(){ int fin,i=0; f=fopen(fiche,"r"); do{ fin=fread(&T[i],sizeof(T),1,f); i++; }while(fin!=0); fclose(f); } /*******************************************/ void affichage() { LirTab(); for(i=0;i<n;i++) { printf("******************************************\n"); printf(" les informations du stagiaire sont : \n"); printf(" Son nom est :%s\n",T[i].nom); printf(" Son prenom est :%s\n",T[i].prenom); printf(" Son matricule est :%d\n",T[i].matricule); printf(" Sa moyenne est :%f\n",T[i].moyenne); printf("******************************************\n"); } enregisTab(); }