Probleme declaration fonction

Probleme declaration fonction - C - Programmation

Marsh Posté le 28-11-2005 à 23:34:14    

bonjour
voici mon programme;
# include <stdio.h>
# include <stdlib.h>
# define max 15  // taille max d'une chaine de caractere
# define pMax 100  // nombre de personne maximal dans le repertoire
int i;
struct personne{
  char nom[max];
  char prenom[max];
  unsigned long tel;
  int pl;
};
struct personne p;
struct personne tab[pMax];
 
for(i=0;i<pMax;i++)
{
  tab[i]=0;
}
 
void Saisie_Personne(){
  printf("Entrer le nom de la personne:\n" );
  scanf("%s",p.nom);
  printf("Entrer le prenom de M(Mde): \n" );
  scanf("%s",p.prenom);
  printf("Entrer le numero de telephone: \n" );
  scanf("%lu",&p.tel);
  p.pl=1;
  return (p);
}
 
Mon compilateur me dit que le type de la fonction est un icompatible avec un return!
Merci de me donner le type a utiliser.

Reply

Marsh Posté le 28-11-2005 à 23:34:14   

Reply

Marsh Posté le 28-11-2005 à 23:57:25    

normal puisque ta fonction est

Code :
  1. void Saisie_Personne()


void designe sans retour, donc pas de return necessaire.
Si tu veux retourner p ta fonction devrait etre du genre  

Code :
  1. struct personne Saisie_Personne()


 
edit : et pense a utiliser les balises code  :jap:

Message cité 1 fois
Message édité par gocho le 28-11-2005 à 23:58:39
Reply

Marsh Posté le 29-11-2005 à 00:22:18    

Terrible, merci,
je sais question bète mais des fois je skotche sur des trucs idiots
et desolé pour les balises!
a +

Reply

Marsh Posté le 29-11-2005 à 08:01:16    

gocho a écrit :

normal puisque ta fonction est

Code :
  1. void Saisie_Personne()


void designe sans retour, donc pas de return necessaire.
Si tu veux retourner p ta fonction devrait etre du genre  

Code :
  1. struct personne Saisie_Personne()




Copie de structure ? Non merci...
 
Statique :  

Code :
  1. int Saisie_Personne(struct personne *p_personne)


ou
Dynamique

Code :
  1. struct personne *Saisie_Personne(void)


 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 29-11-2005 à 19:08:37    

[:cupra]...c'est laquelle est la difference entre ma solution et la tienne en dynamique?
oui oui c'est l'etoile je l'ai vu hein! mais ca va changer quoi ?[:el g]

Reply

Marsh Posté le 29-11-2005 à 19:13:26    

Avec l'étoile tu retournes une adresse au lieu d'une structure, c'est quand même plus rapide d'exécution.  
Et puis, on est en C, vive les pointeurs : tu auras le plaisir de tester le retour de la fonction, car il pourrait être NULL, et tu devras ensuite libérer la mémoire allouée car cette adresse a été initialisée par un retour de malloc, voilà, tu commences à faire du C.

Reply

Marsh Posté le 29-11-2005 à 21:12:14    

est ce que'il ya qlq qui peut m'aider svp

Reply

Marsh Posté le 29-11-2005 à 21:14:28    

mon probleme en matlab

Reply

Marsh Posté le 29-11-2005 à 22:12:03    

[:cupra]euh je pense tout simplement que c'est pas l'auteur du post a qui tu parle là Emmanuel...

Reply

Marsh Posté le 30-11-2005 à 14:59:58    

gocho a écrit :

[:cupra]...c'est laquelle est la difference entre ma solution et la tienne en dynamique?
oui oui c'est l'etoile je l'ai vu hein! mais ca va changer quoi ?[:el g]


 
La première fonction reçoit un pointeur sur la structure à remplir => Elle peut donc la remplir mais cela suppose que la fonction appelante s'est occupée de la phase "réservation de la mémoire pour y stocker la structure".
La fonction appelante s'en sert comme ça

...
struct personne toto;
Saisie_Personne(&toto);
...


ou bien comme ça

...
struct personne *toto;
toto=(struct personne *)malloc(*toto);
if (toto == NULL)
    // Traitement de l'allocation mémoire ratée
 
Saisie_Personne(toto);
...


 
La seconde fonction ne reçoit rien  => Cela lui impose de tout créer elle-même (s'occuper de toute la phase "allocation mémoire + vérification, remplir, etc).
Une fois qu'elle a créé et remplie la structure, elle renvoie un pointeur sur cette dernière pour que la fonction appelante puisse s'en servir
La fonction appelante s'en sert comme ça

...
struct personne *toto;
toto=Saisie_Personne();
if (toto == NULL)
    // Traitement de la saisie ratée
 
...


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 30-11-2005 à 14:59:58   

Reply

Marsh Posté le 30-11-2005 à 17:17:25    

struct personne Saisie_Personne()
<=>
struct personne *Saisie_Personne(void)
 
dans le 1er cas la structure est copiée, pas dans le 2eme.


Message édité par blackgoddess le 30-11-2005 à 17:17:51

---------------
-( BlackGoddess )-
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed