Manipulation Enregistrement avec les fichiers

WalidDk1 Messages postés 1 Statut Membre -  
Dalfab Messages postés 720 Statut Membre -
Bonjour tout le monde,

j'ai un exercice ou je dois créer un enregistrement contentant le nom, prénom, note, matricule en assurant l'unicité de matricule.

Mon problème est que mon code ne vérifie cette condition que pour les 2 dernier matricule saisie et la boucle while(trouve) apparemment ne fonctionne pas ....

voici mon code:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include <stdbool.h>


typedef struct
{
char Matricule[100];
char Nom[50];
char Prenom[50];
float Note1;
}Etudiant;

int main()
{

FILE *f2;
f2 = fopen("StudentsList2.txt","w+");
if(f2 == NULL)
{
printf("Erreur!");
exit(-1);
}
int M,i;
printf("Saisir le nombre d'enregistrements M :");
scanf("%d",&M);
Etudiant etd2[M];
int j = 0;

while( j < M)
{
printf("Saisir le nom : \n");
scanf("%s",etd2[j].Nom);
printf("Sasiri le prenom : \n");
scanf("%s",etd2[j].Prenom);
printf("Saisir la 1ere note \n");
scanf("%f",&etd2[j].Note1);
printf("Saisir le Matricule : \n");
scanf("%s",etd2[j].Matricule);
fprintf(f2,"Nom : %s, Prenom : %s, Note1 : %f \n",etd2[j].Nom,etd2[j].Prenom,etd2[j].Note1);
j++;
}
fclose(f2);
// vérification unicité //
f2 = fopen("StudentsList2.txt","r");
bool trouve = true;
for( j = 0; j<M; j++)
{
for( i = j+1; i<M; i++)
{
while(trouve)
{
if (strcmp(etd2[j].Matricule, etd2[i].Matricule) != 0)
{
trouve = false;
} else {
fclose(f2);
trouve = true;
printf("Matricule existant! entrer a nouveau! : \n");
scanf("%s", etd2[i].Matricule);
f2 = fopen("StudentsList2.txt","w+");
// remplissage //
for(i = 0; i<M; i++)
{
fprintf(f2,"Nom : %s, Prenom : %s, Note1 : %f, Matricule : %s \n",etd2[i].Nom,etd2[i].Prenom,etd2[i].Note1,etd2[i].Matricule);
}

}
}
}
}
fclose(f2);
}
A voir également:

1 réponse

Dalfab Messages postés 720 Statut Membre 101
 
Bonjour,

La manière utilisée pour remplir le fichier est très complexe et sera difficile à mettre au point avec ta structure.
Il est plus simple (y compris pour l'utilisateur) de vérifier dès la saisie que le matricule n'est pas déjà connu.
Il y a deux boucles imbriquées qui utilisent la même variable
i
. Ça ne peut pas marcher.

Pour le
while()
qui ne fonctionne pas, ça n'est pas facile à analyser, peut-être est-dû au problème précédent.
0