Bonsoir tous le monde,

Voilà je viens de tomber sur un problème incompréhensible...

En gros l'IDE (Netbeans dans la vidéo, mais ca le fait aussi avec Code::Blocks et Dev C++) change mes valeurs de variables a la sortie d'une fonction void et je ne comprend pas du tout pourquoi.

Ci dessous mes sources et une petite vidéo de démo.

VIDEO -> ICI (Assez lourde : 26Mo mieux vaut la DL)

main.c
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
/* 
 * File:   main.c
 * Author: Augustin
 *
 * Created on 4 novembre 2009, 22:29
 */
 
#include "../../../../MinGW/include/stdio.h"
#include "../../../../MinGW/include/stdlib.h"
#include "struct.h"
 
/*
 * 
 */
int main(int argc, char** argv)
{
    int nbeleves=0, nbelevesTemp=0;
    int *pnbeleves = &nbeleves;
    printf ("Combien d'eleves y a t-il?\n");
    scanf ("%d", &nbeleves);
    nbelevesTemp = nbeleves;
    e T[nbeleves-1];
    RemplirTab (T, nbeleves);
    nbeleves = nbelevesTemp;
    AfficherTab (T, nbeleves);
    return (EXIT_SUCCESS);
}
fonctioneleve.c
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
91
92
#include "struct.h"
#include "../../../../MinGW/include/stdio.h"
#include "../../../../MinGW/include/stdlib.h"
 
void RemplirTab (e T[], int nbeleves)
{
    int i;
    i=0;
    while ( i < nbeleves)
    {
        printf ("Tapez un nom\n");
        scanf ("%s", &T[i].Nom);
        printf ("Quel est son prenom?\n");
        scanf ("%s", &T[i].Prenom);
        printf ("Quel est son numéro de securite sociale?\n");
        scanf("%ld", &T[i].Num);
        T[i].moyenne=-1; //initialisation de la moyenne a -1 pour faire au moins une fois le while
        while(T[i].moyenne > 20 || T[i].moyenne < 0)
        {
            printf ("Quelle est sa moyenne?\n");
            scanf ("%f", &T[i].moyenne);
            if(T[i].moyenne > 20 || T[i].moyenne < 0)
                printf("ERREUR\nVous devez saisir une note entre 0 et 20\n");
        }
        i++;
    }
}
 
void AfficherTab (e T[], int nbeleves)
 {
     int i=0;
     while (i!= nbeleves)
     {
         printf ("%s %s : num securite sociale %ld, moyenne %.2f\n", T[i].Nom,T[i].Prenom,T[i].Num,T[i].moyenne);
         i++;
     }
 }
 
 
/*void TrierTab (e T[], int nbeleves)
{
    int i, cpt;
    e vl={"","",0,0};
    for (cpt=0; cpt<nbeleves;cpt++)
    {
        for (i=0;i<nbeleves;i++)
        {
            if (strcmp(T[i].Nom,T[i+1].Nom)>0)
            {
                vl=T[i];
                T[i]=T[i+1];
                T[i+1]=vl;
            }
        }
    }
}
 
int ChercherVal (e T[], int nbeleves)
{
    int i, eleve, trouve;
    printf ("quel est el numero de securite sociale de l'eleve?\n");
    scanf("%ld",&eleve);
    i=0;
    trouve=0;
    while (i<nbeleves && trouve==0)
    {
        if (T[i].Num==eleve)
        trouve= 1;
    }
    if(trouve==0)
    {
        i=-1;
        printf ("cet eleve n'est pas dans la liste\n");
    }
    else
        printf ("eleve trouve:\n%s %s : num securite sociale %ld, moyenne %.2f\n", T[i].Nom,T[i].Prenom,T[i].Num,T[i].moyenne);
    return i;
}
 
void SuprVal (e T[], int* pnbeleves)
{
    int trouve,i, pos;
    pos=ChercherVal (T,&pnbeleves);
    if (pos!=-1)
    {
        for(i=pos;i<&pnbeleves;i++)
        {
            T[i]=T[i+1];
        }
        *pnbeleves=*pnbeleves-1;
    }
}*/
struct.h
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
/* 
 * File:   struct.h
 * Author: Augustin
 *
 * Created on 4 novembre 2009, 22:32
 */
 
#ifndef _STRUCT_H
#define	_STRUCT_H
 
#define MAX_NOM 20
 
typedef struct e
{
    char Nom[MAX_NOM];
    char Prenom[MAX_NOM];
    long int Num;
    float moyenne;
}e;
 
 
void RemplirTab (e T[], int nbeleves);
void AfficherTab (e T[],int nbeleves);
void TrierTab (e T[], int nbeleves);
int ChercherVal (e T[], int nbeleves);
void SuprVal (e T[], int* nbeleves);
 
#endif	/* _STRUCT_H */