Problème d'affichage
salma88
-
kilian Messages postés 8675 Date d'inscription Statut Modérateur Dernière intervention -
kilian Messages postés 8675 Date d'inscription Statut Modérateur Dernière intervention -
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
- Affichage heure freebox révolution - Forum Freebox
- Windows 11 affichage classique - Guide
- Problème affichage photo messenger - Forum Facebook Messenger
- Problème affichage clavier android - Guide
3 réponses
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(); }