voici le code mais j'ai oublier les entête et les déclaration de structure mais la n'est le PB.

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
 
main()
{
 
int i,n;                   // compteur et nombre à enregistrer
 char nomfich[21];  //  nom de fichier
 FILE * sortie;        //  flux de manipulation de fichier
 cel tete,cour;        // tete et cour pour la creation de la liste chaine
 char car; 
 struct def bloc;         // variable permettant de boucler le programme
 
 tete=NULL;   //deb   comme debut
     cour=NULL; 
     i=0;
printf("\nDonnez le nom du fichier a creer: ");
scanf("%s",nomfich); //gets(nomfich);
essai:printf("\nEntrer le nombre de personne que  vous voulez enregistrer: ");
  scanf("%d",&n);
  if(n<=0){
           printf("\nVous ne pouvez enregistrer vos donnees!");
           goto essai;
          }
  else
  {
   sortie=fopen(nomfich,"w");   //ecriture dans le fichier
   while (i<n)
     { 
 
       /* le pb est la malgré le gets je ne récupère pas le nom. il 2*gets !!
        voir fichier joins */
      // gets(bloc.nom);
       printf("\n nom    : ");
       gets(bloc.nom);
 
       printf("prenom    : ");
       gets(bloc.prenom);
       printf(" age    : ");
       scanf("%d",&bloc.age);
       printf(" note physique    : ");
       scanf("%f",&bloc.ph); 
       printf(" note mathematique    : ");
       scanf("%f",&bloc.ma);
       printf(" note chimie    : ");
       scanf("%f",&bloc.ch);  
       fwrite(&bloc,sizeof(bloc),1,sortie);
       i++;
     }
   fclose(sortie);
  }
printf("\n\nChoisir le mode d'affichage que vous desirez voir!!!");
rep:printf("\n1- pour imprimer les donnees du fichier");
    printf("\n2- pour imprimer les donnees de la liste selon une insertion en tete");
    printf("\n3- pour imprimer les donnees de la liste selon une insertion en queue\n\n");
scanf("%d",&i);
if (i==1)
{
  lecture(nomfich,&n);
  //goto fin;
}
else if (i==2)
{
   ajoutete(nomfich,&tete,&n);
  // goto fin; 
}else if (i ==3)
{
   ajoutqueue(nomfich,&tete,&n);
   //goto fin;  
}else
{
   printf("Erreur de saisir du choix");
   goto rep;         
}
 
cour=tete;
while(cour!=NULL)
{
    printf("\n\nnom : %s",cour->nom);  
    printf("\nprenom : %s",cour->prenom);
    printf("\nage : %d",cour->age);
    printf("\nmoyenne: %.2f",cour->moy);
    cour=cour->svt;
}
free(cour);                       
free(tete);   
 
fin: printf("\n\nDesirez-vous reprendre l'execution du programme? o/n\n");
 
fin2: printf("\n\nTaper une touche pour quitter le programme. . . ");  
getch();
}

lorsque j'exucute ce code le programme ne me donne pas l'occasion de saisir le nom alors qu'il y a bien un gets après l'instruction : printf("\n nom : ");
pourquoi cette anomalie. j'ai aussi constater que si je mets deux foi gets ça marche.
pourquoi?

j'aimerai compredre le problème.
merci