[C] Variable perdant sa valeur
Résolu
Arcord
Messages postés
24
Date d'inscription
Statut
Membre
Dernière intervention
-
Arcord Messages postés 24 Date d'inscription Statut Membre Dernière intervention -
Arcord Messages postés 24 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je fais un petit projet pour mes cours où je dois faire la structure d'une école mais quand je sors de la fonction "remplirecole" qui initialise les classes avec quelques étudiants, ma variable ecole.classe[x].num en sort vide, pourtant j'ai vérifié au moyen de printf, elle est bien initialisée (J'ai ensuite vérifié dans la fonction main si j'utilisais la bonne manière pour l'afficher, tout porte à croire que oui ... ). Ce n'est pas un problème de pointeur je pense car tout le reste de ma structure garde les valeurs initialisées ...
Voici mon code
Comme vous pouvez le voir, elle s'initialise bien, elle s'affiche correctement mais on dirait que quelques part entre son initialisation et quand je la demande dans le main, elle disparait ... Si quelqu'un à une idée, merci d'avance :-)
Je fais un petit projet pour mes cours où je dois faire la structure d'une école mais quand je sors de la fonction "remplirecole" qui initialise les classes avec quelques étudiants, ma variable ecole.classe[x].num en sort vide, pourtant j'ai vérifié au moyen de printf, elle est bien initialisée (J'ai ensuite vérifié dans la fonction main si j'utilisais la bonne manière pour l'afficher, tout porte à croire que oui ... ). Ce n'est pas un problème de pointeur je pense car tout le reste de ma structure garde les valeurs initialisées ...
Voici mon code
typedef struct{ char matricule[LGMAT]; char nom[LGTXT]; char prenom[LGTXT]; double cote[MAXNBCOTE]; double pourcent; int echec; } Tetu; typedef struct{ Tetu ClasseEtu[MAXETU]; int nbEtu; char nom[4]; char num[2]; } Tclasse; typedef struct{ Tclasse Classe[NBCLASSE]; int nbclasse; }Tecole; void remplirEcole(Tecole* ecl) { //1Tl1 strcpy(ecl->Classe[0].ClasseEtu[0].matricule,"00-1TL1-1"); strcpy(ecl->Classe[0].ClasseEtu[0].nom,"Eleve1"); strcpy(ecl->Classe[0].ClasseEtu[0].prenom,"Prenom1"); strcpy(ecl->Classe[0].ClasseEtu[1].matricule,"00-1TL1-2"); strcpy(ecl->Classe[0].ClasseEtu[1].nom,"Eleve2"); strcpy(ecl->Classe[0].ClasseEtu[1].prenom,"Prenom2"); strcpy(ecl->Classe[0].ClasseEtu[2].matricule,"00-1TL1-3"); strcpy(ecl->Classe[0].ClasseEtu[2].nom,"Eleve3"); strcpy(ecl->Classe[0].ClasseEtu[2].prenom,"Prenom3"); ecl->Classe[0].nbEtu=3; strcpy(ecl->Classe[0].num,"0"); strcpy(ecl->Classe[0].nom,"1TL1"); //1TL2 strcpy(ecl->Classe[1].ClasseEtu[0].matricule,"01-1TL2-1"); strcpy(ecl->Classe[1].ClasseEtu[0].nom,"Eleve1"); strcpy(ecl->Classe[1].ClasseEtu[0].prenom,"Prenom1"); strcpy(ecl->Classe[1].ClasseEtu[1].matricule,"01-1TL2-2"); strcpy(ecl->Classe[1].ClasseEtu[1].nom,"Eleve2"); strcpy(ecl->Classe[1].ClasseEtu[1].prenom,"Prenom2"); strcpy(ecl->Classe[1].ClasseEtu[2].matricule,"01-1TL2-3"); strcpy(ecl->Classe[1].ClasseEtu[2].nom,"Eleve3"); strcpy(ecl->Classe[1].ClasseEtu[2].prenom,"Prenom3"); ecl->Classe[1].nbEtu=3; // La variable est initialisée ici strcpy(ecl->Classe[1].num,"1"); // La variable s'affiche normalement printf("dans remplirecole : %s\n",ecl->Classe[1].num); strcpy(ecl->Classe[1].nom,"1TL2"); getch(); //1TM1 strcpy(ecl->Classe[2].ClasseEtu[0].matricule,"02-1TM1-1"); strcpy(ecl->Classe[2].ClasseEtu[0].nom,"Eleve1"); strcpy(ecl->Classe[2].ClasseEtu[0].prenom,"Prenom1"); strcpy(ecl->Classe[2].ClasseEtu[1].matricule,"02-1TM1-2"); strcpy(ecl->Classe[2].ClasseEtu[1].nom,"Eleve2"); strcpy(ecl->Classe[2].ClasseEtu[1].prenom,"Prenom2"); strcpy(ecl->Classe[2].ClasseEtu[2].matricule,"02-1TM1-3"); strcpy(ecl->Classe[2].ClasseEtu[2].nom,"Eleve3"); strcpy(ecl->Classe[2].ClasseEtu[2].prenom,"Prenom3"); ecl->Classe[2].nbEtu=3; strcpy(ecl->Classe[2].num,"2"); strcpy(ecl->Classe[2].nom,"1TM1"); //1TM2 strcpy(ecl->Classe[3].ClasseEtu[0].matricule,"03-1TM2-1"); strcpy(ecl->Classe[3].ClasseEtu[0].nom,"Eleve1"); strcpy(ecl->Classe[3].ClasseEtu[0].prenom,"Prenom1"); strcpy(ecl->Classe[3].ClasseEtu[1].matricule,"03-1TM2-2"); strcpy(ecl->Classe[3].ClasseEtu[1].nom,"Eleve2"); strcpy(ecl->Classe[3].ClasseEtu[1].prenom,"Prenom2"); strcpy(ecl->Classe[3].ClasseEtu[2].matricule,"03-1TM2-3"); strcpy(ecl->Classe[3].ClasseEtu[2].nom,"Eleve3"); strcpy(ecl->Classe[3].ClasseEtu[2].prenom,"Prenom3"); ecl->Classe[3].nbEtu=3; strcpy(ecl->Classe[3].num,"3"); strcpy(ecl->Classe[3].nom,"1TM2"); ecl->nbclasse=NBCLASSE; } int main() { Tecole ecole; remplirEcole(&ecole); // La variable est censée être initialisée ici printf("apres remplirecole : %s\n",ecole.Classe[1].num); // Ici elle est vide strcpy(ecole.Classe[1].num,"1"); // Ici je lui redonne une valeur printf("final : %s\n",ecole.Classe[1].num); // La valeur redonnée s'affiche return 0; }
Comme vous pouvez le voir, elle s'initialise bien, elle s'affiche correctement mais on dirait que quelques part entre son initialisation et quand je la demande dans le main, elle disparait ... Si quelqu'un à une idée, merci d'avance :-)
A voir également:
- [C] Variable perdant sa valeur
- Logiciel gratuit calcul valeur nutritionnelle - Télécharger - Santé & Bien-être
- Valeur ascii - Guide
- Excel ne pas afficher #valeur ✓ - Forum Excel
- Formule excel si contient texte alors valeur ✓ - Forum Excel
- Cette valeur ne correspond pas aux restrictions de validation des données pour cette cellule ✓ - Forum MacOS
2 réponses
J'ai réduit le champ d'investigation :
Affichement 1 => vide (normal, c'est avant l'initialisation);
Affichement 2 => 1 (Juste après l'initialisation;
Affichemement 3 => vide ... POURQUOI ?
Entre le 2 et le 3, j'ai juste fait une nouvelle affectation ... si vous voyez une idée, merci d'avance ;)
ecl->Classe[1].nbEtu=3; printf("dans remplirecole 1: %s\n",ecl->Classe[1].num); strcpy(ecl->Classe[1].num,"1"); printf("dans remplirecole 2: %s\n",ecl->Classe[1].num); strcpy(ecl->Classe[1].nom,"1TL2"); printf("dans remplirecole 3: %s\n",ecl->Classe[1].num);
Affichement 1 => vide (normal, c'est avant l'initialisation);
Affichement 2 => 1 (Juste après l'initialisation;
Affichemement 3 => vide ... POURQUOI ?
Entre le 2 et le 3, j'ai juste fait une nouvelle affectation ... si vous voyez une idée, merci d'avance ;)
Encore moi :D
J'ai trouvé, la variable "nom" pour TClasse est déclarée avec 4 caractères, alors qu'elle doit toujours avoir un caractère en plus de ceux prévu. Du coup la variable nom écrasait l'espace de la variable "num".
Voila, vous n'avez pas aidé, je ne vous en ai pas laissé le temps, mais poster ici m'a aidé à comprendre ma faute :-)
Bonne journée
J'ai trouvé, la variable "nom" pour TClasse est déclarée avec 4 caractères, alors qu'elle doit toujours avoir un caractère en plus de ceux prévu. Du coup la variable nom écrasait l'espace de la variable "num".
Voila, vous n'avez pas aidé, je ne vous en ai pas laissé le temps, mais poster ici m'a aidé à comprendre ma faute :-)
Bonne journée