Langage C, pointeur en parametre

Fermé
vincent68170 - 18 mai 2009 à 11:36
 loupius - 18 mai 2009 à 16:06
Bonjour,

j'ai un programme en C qui utilise une fonction nextHoraire avec un pointeur en perametre:

#define NBHORAIRES 10
const horaire Horaires[nbHoraires]={
{6,0} ,{6,30} ,{7,0} ,{7,30} ,{8,10},
{8,45},{10,15},{12,10},{14,25},{14,45}
};



horaire nextHoraire(horaire hr, horaire *h , int nbHoraires )
{
//horaire h_aux={h.heures,h.minutes};
int i=0;
while ((hr.heures > h[i]->heures) && (i< nbHoraires) )
i++;
if(i== nbHoraires )
return *h[0];
while(( hr.minutes > h[i]->minutes) && i< nbHoraires )
if (h[i]->heures > hr.heures)
return *h[i];
else
i++;
if( (i== nbHoraires) || ( (hr.heures >= h[nbHoraires-1]->heures) && ( hr.minutes >= h [nbHoraires-1]->minutes) ) )
return *h[0];
else
return *h[i];

}

que j'utilise dans un main de la façon suivante:

horaire heure_reelle={4,50};

prochainHoraire=nextHoraire(heure_reelle,&Horaire,NBHORAIRES);

A la compilation j'ai une erreur qui me renvoie à la ligne de déclaration de nextHoraire:
horaire nextHoraire(horaire hr, horaire *h , int nbHoraires )
et qui me dit:
Error 28 "ex_rfid_projet.c" Line 142(68,69): Expecting an identifier.


Quelqu'un pourrait-il maider ou m'expliquer ce que peut signifier cette erreur?
je vous remercie d'avance
A voir également:

7 réponses

Le problème c'est que tu ne nous dis pas comment est déclaré 'horaire'.
D'autre part:
#define NBHORAIRES 10
const horaire Horaires[nbHoraires]={ ...

pose problème, ce doit être: 'const horaire Horaires[NBHORAIRES]'.
A suivre.
0
vincent68170
18 mai 2009 à 13:20
merci pour ta réponse. La déclaration de la taille du tableau en minuscule n'est pas le probleme (je l'ai juste mal tapé sur le forum).
horaire est une structure definie de la maniere suivante:

typedef struct{
int8 heures;
int8 minutes;
} horaire;


Merci de m'éclairer
0
Après avoir déclaré:
const horaire Horaires[NBHORAIRES] =
et lancé la fonction:
horaire prochainHoraire = nextHoraire (heure_reelle, Horaires, NBHORAIRES);
il est nécessaire de déclarer ainsi la fonction:
horaire nextHoraire (horaire hr, const horaire h[] , int nbHoraires)
et de modifier la ligne:
while ( (hr.heures > h[i].heures) && (i< nbHoraires) )
ainsi que les suivantes.
AInsi, la compilation ne devrait être qu'un long fleuve tranquille.
Bonne continuation.
0
vincent68170
18 mai 2009 à 13:57
Merci, j'avais déjà essayé en ecrivant ma foonction de la maniere suivante:
horaire nextHoraire(horaire hr, const horaire h [] )
{
int nbHor;
nbHor = sizeof(h);
int i=0;
while ((hr.heures > h[i].heures) && (i<nbHor ) )
i++;
if(i== sizeof(h) )
return *h[0];
while(( hr.minutes > h[i].minutes) && i< nbHor )
if (h[i].heures > hr.heures)
return *h[i];
else
i++;
if( (i== nbHor) || ( (hr.heures >= h[nbHor-1].heures) && ( hr.minutes >= h[nbHor-1].minutes) ) )
return h[0];
else
return h[i];

}

mais cette fois ci la compilateur m'indique l'erreur suivante (toujours sur la ligne de la déclaration):
*** Error 32 "ex_rfid_projet.c" Line 142(47,54): Expecting a , or )



NB: j'appelle la fonction de la maniere suivante:
prochainHoraire=nextHoraire(heure_reelle,Horaire);


Merci
0
Cette écriture n'a aucun sens:
horaire nextHoraire(horaire hr, const horaire h [] )
{
int nbHor;
nbHor = sizeof(h);

Il est impossible de déterminer la taille du tableau !
Il est nécessaire de passer la taille; une alternative est de marquer la fin du tableau par une séquence particulière (par exemple: {25,0} qui est un horaire absurde) que l'on pourra tester.
Il ne faut pas écrire:
return *h[0];
mais
return h[0];
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
vincent68170
18 mai 2009 à 14:25
ok, j'ai remis la taille du tableau en parametre.
Mais il me ressort toujours la même erreur qui semble venir du const devant horaire h[].
(NB: l'erreur est *** Error 32 "ex_rfid_projet.c" Line 142(47,54): Expecting a , or ). )
j'enlève le const pour voir ce que le compilateur me dit... et il m'indique une nouvelle erreur quand j'appelle la fonction:
prochainHoraire=nextHoraire(heure_reelle , Horaire,NBHORAIRES);
=> *** Error 54 "ex_rfid_projet.c" Line 270(44,51): Expecting a variable



voilà la fonction :
horaire nextHoraire(horaire hr,const horaire h[],int nbHor )
{

int i=0;

while ((hr.heures > h[i].heures) && (i<nbHor ) )
i++;
if(i== sizeof(h) )
return h[0];
while(( hr.minutes > h[i].minutes) && i< nbHor )
if (h[i].heures > hr.heures)
return *h[i];
else
i++;
if( (i== nbHor) || ( (hr.heures >= h[nbHor-1].heures) && ( hr.minutes >= h[nbHor-1].minutes) ) )
return h[0];
else
return h[i];

}
0
Bon, on va pas tourner autour du pot pendant 8 jours; voici un code qui se compile bien:
#include<stdio.h>

#define NBHORAIRES 10

typedef struct
{
  int heures;
  int minutes;
} horaire; 

const horaire Horaires[NBHORAIRES] =
{
  {6, 0},{ 6,30},{ 7, 0},{ 7,30},{ 8,10},
  {8,45},{10,15},{12,10},{14,25},{14,45}
};

horaire nextHoraire (horaire hr, const horaire h[], int nbHor)
{
  int i = 0;
  while ((hr.heures > h[i].heures) && (i<nbHor))
    i++;
  if (i == nbHor)
    return h[0];
  while ((hr.minutes > h[i].minutes) && (i< nbHor))
    if (h[i].heures > hr.heures)
      return h[i];
    else
      i++;
  if ( (i != nbHor) && ((hr.heures < h[nbHor-1].heures) || (hr.minutes < h[nbHor-1].minutes)) )
    return h[i];
  return h[0];
}

int main()
{
  horaire heure_reelle = {18,44};
  horaire prochainHoraire = nextHoraire (heure_reelle, Horaires, NBHORAIRES);
  printf ("Prochain horaire: %d h %d mn\n", prochainHoraire.heures, prochainHoraire.minutes);
  return (0);
}
Bonne continuation.
0
vincent68170
18 mai 2009 à 15:27
Merci c'est exactement ce que je voulais faire. Malheureusement cele m'affiche toujours les mêmes erreurs sous l'envirronement avec lequel je tavail (MPLAB, c'est pour telecharger sur un microcontroleur PIC).
Mais votre solution marche parfaitement.
Merci beaucoup du temps que tu y a consacré
0
Tu aurais pu préciser cet environnement particulier. Moi j'ai compilé classiquement avec 'gcc'.
Si le 'const' pose un problème, tu le vires !
Bon courage.
0