Bonjour à tous, pour un projet je dois coder un agenda, j'ai un petit peu avancé mais cela fais déjà 3 jours que je bloque sur une initialisation de structure.
Voila ma fonction qui initialse tous les paramètres de ma structure à 0
Ma fonction initialise bien mon tableau de structure, je le vois grâce au printf, mon problème est que lorsque je relis les paramètres sensés avoir été passés à 0 dans une autre fonction, ce ne sont plus les mêmes, le tableau que j’initialise et celui que lit ensuite sont différent, l'un doit être la copie de l'autre, voila mon main :
int main()
{
RdV rendezvous[NBMAX_RDV];
initialiseTableauRDV(&rendezvous);
menu1(&rendezvous);
return 0;
}
Ma fonction menu1 appelle une foction nomée traiterChoixAjouterRDV et c'est dans celle-ci que je souhaite lire les valeurs des cases de mon tableau pour ensuite savoir quelles cases sont libres et lesquelles ne le sont pas, voici sa defintion :
void traiterChoixAjouterRDV(RdV *rendezvous)
{
int i;
for(i=0; rendezvous[i].date.jour != 0; i++)
{
printf("RDV %d/%d/%d %dh%d - %dh%d \n %s",rendezvous[i].date.jour, rendezvous[i].date.mois, rendezvous[i].date.annee, rendezvous[i].horaireDeb.heure, rendezvous[i].horaireDeb.minute, rendezvous[i].horaireFin.heure, rendezvous[i].horaireFin.minute, rendezvous[i].libele);
} //Instruction vide pour arriver a la premiere case libre
printf("RDV %d/%d/%d %dh%d - %dh%d \n %s",(*rendezvous).date.jour, (*rendezvous).date.mois, (*rendezvous).date.annee, (*rendezvous).horaireDeb.heure, (*rendezvous).horaireDeb.minute, (*rendezvous).horaireFin.heure, (*rendezvous).horaireFin.minute, rendezvous[i].libele);
printf("\n");
//int test;
printf("\nEn entrant dans la fonciton le nb de rdv est de %d\n", i);
printf("----------------------------------\n");
printf("----------AJOUTER RDV-----------\n");
printf("----------------------------------\n");
printf("Entrez le rendez-vous sous la forme suivante :\nJJ/MM/AAAA HeureDebut - HeureFin\n");
scanf(" %d/%d/%d %d h %d - %d h %d",&rendezvous[i].date.jour, &rendezvous[i].date.mois, &rendezvous[i].date.annee, &rendezvous[i].horaireDeb.heure, &rendezvous[i].horaireDeb.minute, &rendezvous[i].horaireFin.heure, &rendezvous[i].horaireFin.minute);
printf("\nEntrez Maintenant le libelle de ce rendez vous : ");
viderBuffer(); //On purge le buffer
fgets( rendezvous[i].libele, LGMAX_LIBEL, stdin); //Utilisation de fgets pour recuperer une phrase, la fonciton scanf s'arrette au premier espace rencontré
printf("Votre rendez-vous a ete ajoute !\n");
//printf("RDV %d/%d/%d %dh%d - %dh%d \n %s",rendezvous[i].date.jour, rendezvous[i].date.mois, rendezvous[i].date.annee, rendezvous[i].horaireDeb.heure, rendezvous[i].horaireDeb.minute, rendezvous[i].horaireFin.heure, rendezvous[i].horaireFin.minute, rendezvous[i].libele);
for(i=0; rendezvous[i].date.jour != 0; i++)
{
printf("RDV %d/%d/%d %dh%d - %dh%d \n %s",rendezvous[i].date.jour, rendezvous[i].date.mois, rendezvous[i].date.annee, rendezvous[i].horaireDeb.heure, rendezvous[i].horaireDeb.minute, rendezvous[i].horaireFin.heure, rendezvous[i].horaireFin.minute, rendezvous[i].libele);
}
printf("En sortant de la fonciton le nb de rdv est de %d", i);
menu2(&rendezvous);
}
J'ai placé quelques lignes de test pour tenter de debugger mon programme mais rien y fait, je suis comlpèteùent bloqué, s'y quelqu'un aurait un peu de temps ça serai vraiement sympa, j'ai déjà lu tous les articles possible mais je n'ai pas trouvé de solution à mopn problème.
En effet, on n'écrit jamais comme la première ligne, et toujours comme la deuxième.
Ensuite, c'est faux dans ton cas, car ta fonction ne reçoit pas un pointeur sur Rdv, mais un tableau de Rdv (en fait c'est la même chose, mais la sémantique est différente).
Ce qui veux dire qu'il faut initialiser chaque case de ce tableau dans ton for :
Merci Smiley et Nutnut, désolé j'avais pas vu votre réponse,
Smiley j'ai corrigé, j'avais déjà essayé comme ceci avant mais le problème reste identique, au début de ma fonction avec le printf (dans ma fonction d’initialisation) je vois bien que mon tableau (ou du moins la copie de mon tableau je suppose) est bien initialisée, voici ce qui s'affiche :
Mais lorsque ma fonction suivante vérifie qu'elle peut écrire à une ligne donnée tu tableau, j'ai refais un printf pour voir le contenu de cette ligne du tableau à ce moment là et voici ce qu'il s'affiche :
Je pense que je n'arrive pas à bien passer mon tableau de structure en paramètre, je dois m’emmêler avec les pointeurs, adresses, tableaux etc.., j'ai essayé plein de combinaisons différentes en espérant trouver quelque chose qui fonctionne mais en vain.
Nutnut j'ai essayé ta méthode mais je n'arrive pas à la mettre en place avec un tableau, j'ai quand même tenté mais l'initilasation ne se produit pas, toutes les ligne de mon tableau sont similaires à la deuxième insertion de code dans ma réponse à Smiley32.
Je ne sais plus trop quoi essayer, cette erreur me rend fou!
Salut alors si tu reçois ce genre de truc c'est que tu accèdes a une partie de ta mémoire ou il a quelque chose écrite tu n'as pas décaler ton pointeur quelque part sans faire exprès ??
Tu compiles avec quoi ? renseigne toi sur valgrind c'est un programme qui permet de débuger entre autre se style d'erreur
peut tu nous donner ta stucture complète ? (je veux essayer de te montrer comment faire avec memset)
Quand tu regardes l'abîme, l'abîme regarde aussi en toi.
Il n'est pas utile de comparer avec NULL ce que retourne memset. En outre, malloc + memset se réduit à calloc. Mais la fonction memset est de bas niveau (elle travaille sur des bytes) et n'est pas idéal (pas tout à fait portable, voire carrément fausse) pour initialiser des types un peu plus compliqués que des entiers.
Initialisation d'un tableau de structure en C
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
J'aime les bandes dessinées, manhuas, manhwas, mangas, comics... Du coup j'ai fait aralosbd.fr !
J'aime les bandes dessinées, manhuas, manhwas, mangas, comics... Du coup j'ai fait aralosbd.fr !