Variable qui change de valeur seule [Résolu]

Signaler
Messages postés
27
Date d'inscription
vendredi 22 mars 2019
Statut
Membre
Dernière intervention
29 février 2020
-
Messages postés
492
Date d'inscription
dimanche 7 février 2016
Statut
Membre
Dernière intervention
21 novembre 2020
-
Bonjour a tous ma variable nombre change de valeur seule elle prend des valeur bizarres comme 23 alors qu'elle doit être décrémentée et ne doit pas dépasser le 10 ce problème est au niveau de la procédure chargementInit de plus le fichier est vide quand je veux l'afficher
le fichier a été ouvert dans le programme principal et pour faire gros j'essaye de générer des informations et les écrire dans un fichier (méthode L7OVC)
je vous en supplie aidez moi

void chargementInit(L7OVC * fichier,int n)
{
      int i,taille;
    char taillech[1000];
    char mat[1000];
    int matricule;
    char nom[1000],wilaya[1000],sexe[1000],gp[1000],grade[1000],dp[1000],prenom[1000];
    date DN,DR;
    char specialite[1000];
    char DNj[1000],DNm[1000],DNa[1000];
    char DRj[1000],DRm[1000],DRa[1000];
    int n1;
    Tbloc buf;
	char universites[108][500];
    char ligne[500];
    i=0;
   FILE *f=NULL;
     f=fopen("universites.txt","r"); // on ouvre le fichier des universites

    while ( !feof(f))
       {
            fgets(&ligne,255,f);
            strcpy(universites[i],ligne);
            i++;
       }

    fclose(f);
    int nombre=n;

  int j;
   int cpt;
    i=1;
    j=0;

  // while(nombre>0)
   // {
         cpt=0;
        // on genere toutes les informations

       // wilaya naissance
        aleaWilaya(wilaya);
       cpt=cpt+strlen(wilaya);

        // matricule
        matricule=aleaMatricule();
        cpt=cpt+6;

        // Nom
        taille=aleaTailleNP();
        aleaNP(taille,nom);
        cpt=cpt+strlen(nom);

        // preNom
        taille=aleaTailleNP();
        aleaNP(taille,prenom);
        cpt=cpt+strlen(prenom);

       // Sexe
        aleaSexe(sexe);
        cpt=cpt+strlen(sexe);

        // grade
        aleaGrade(grade);
        cpt=cpt+strlen(grade);

        // specialite
        aleaSpec(specialite);
        cpt=cpt+strlen(specialite);

        // dernier diplome
        aleeaDp(dp);
        cpt=cpt+strlen(dp);

         // groupe sanguin
        aleaGrp(gp);
        cpt=cpt+strlen(gp);


        // etablissmeent / univ

       int random= rand()%108;
         cpt=cpt+strlen(universites[random-1]);


        // date de naissance
        aleaDateN(&DN);
        cpt=cpt+nbpos(DN.jour);
        cpt=cpt+nbpos(DN.mois);
        cpt=cpt+nbpos(DN.annee);

        // date recrutement
        aleaDateR(&DR);
        cpt=cpt+nbpos(DR.jour);
        cpt=cpt+nbpos(DR.mois);
        cpt=cpt+nbpos(DR.annee);

        turn_to_string(taillech,cpt,3);
          // printf("%d nombre1 \n",nombre);
        ecrire_chaine(fichier,3,&i,&j,taillech,&buf);
        buf.chaine[j]='0';
        j++;
        turn_to_string(mat,matricule,6);
          // printf("%d nombre2 \n",nombre);
        ecrire_chaine(fichier,6,&i,&j,mat,&buf);
        aff_entete(fichier,5,entete(fichier,5)+1);
         ecrire_chaine(fichier,strlen(universites[random-1]),&i,&j,universites[random-1],&buf);
        ecrire_chaine(fichier,strlen(nom),&i,&j,nom,&buf);
        ecrire_chaine(fichier,strlen(prenom),&i,&j,prenom,&buf);
          ecrire_chaine(fichier,strlen(sexe),&i,&j,sexe,&buf);
        turn_to_string(DNj,DN.jour,nbpos(DN.jour));
         //printf("%d nombre3 \n",nombre);
        turn_to_string(DNm,DN.mois,nbpos(DN.mois));
        turn_to_string(DNa,DN.annee,nbpos(DN.annee));
        ecrire_chaine(fichier,2,&i,&j,DNj,&buf);
        ecrire_chaine(fichier,2,&i,&j,DNm,&buf);
        ecrire_chaine(fichier,4,&i,&j,DNa,&buf);
          //printf("%d nombre4 \n",nombre);
        ecrire_chaine(fichier,strlen(wilaya),&i,&j,wilaya,&buf);
        ecrire_chaine(fichier,strlen(gp),&i,&j,gp,&buf);
        turn_to_string(DRm,DR.mois,nbpos(DR.mois));
        turn_to_string(DRa,DR.annee,nbpos(DR.annee));
        turn_to_string(DRj,DR.jour,nbpos(DR.jour));
          //printf("%d nombre5 \n",nombre);
        ecrire_chaine(fichier,strlen(DRj),&i,&j,DRj,&buf);
        ecrire_chaine(fichier,strlen(DRm),&i,&j,DRm,&buf);
        ecrire_chaine(fichier,strlen(DRa),&i,&j,DRa,&buf);
        ecrire_chaine(fichier,strlen(specialite),&i,&j,specialite,&buf);
         ecrire_chaine(fichier,strlen(grade),&i,&j,grade,&buf);
           //printf("%d nombre6 \n",nombre);
           n1=nombre;
        ecrire_chaine(fichier,strlen(dp),&i,&j,dp,&buf);
          //printf("%d nombre7 \n",nombre);
          nombre=n1;
      nombre=nombre-1;
      printf("%d le nombre\n");
   // }

    ecriredir(fichier,i,&buf);

        rewind(fichier->fich);

        fwrite(&(fichier->entete),sizeof(Entete),1,fichier->fich);/// on ecrit l'entete
}



Configuration: Windows / Chrome 75.0.3770.142

1 réponse

Messages postés
492
Date d'inscription
dimanche 7 février 2016
Statut
Membre
Dernière intervention
21 novembre 2020
63
Bonjour,

Etant donné qu'une variable ne change pas toute seule de valeur. Ta variable est modifiée soit directement (lignes 133 et 134), soit indirectement par l'utilisation d'un pointeur qui pointerait n'importe où ('heureusement' sur ta variable) ou bien par débordement d'un tableau qui atteindrait ta variable.
L'erreur serait donc dans une de tes fonctions appelée ou dans la fonction elle-même.

Pour trouver le 'coupable' tu peux utiliser des printfs judicieux pour y arriver en quelques mois. Tu devrais plutôt utiliser ton débogueur en mode pas à pas, et trouver à quel moment exact elle change de valeur.