Variable qui change de valeur seule

Résolu/Fermé
marie12_2000 Messages postés 27 Date d'inscription vendredi 22 mars 2019 Statut Membre Dernière intervention 29 février 2020 - 26 déc. 2019 à 09:06
Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 - 26 déc. 2019 à 12:02
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

Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 101
26 déc. 2019 à 12:02
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.
1