Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1084 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Probleme declaration fonction

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Probleme declaration fonction

n°1255030
mador
Posté le 28-11-2005 à 23:34:14  profilanswer
 

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.

mood
Publicité
Posté le 28-11-2005 à 23:34:14  profilanswer
 

n°1255037
gocho
Posté le 28-11-2005 à 23:57:25  profilanswer
 

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
n°1255042
mador
Posté le 29-11-2005 à 00:22:18  profilanswer
 

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

n°1255060
Emmanuel D​elahaye
C is a sharp tool
Posté le 29-11-2005 à 08:01:16  profilanswer
 

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/
n°1255515
gocho
Posté le 29-11-2005 à 19:08:37  profilanswer
 

[: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]

n°1255527
Trap D
Posté le 29-11-2005 à 19:13:26  profilanswer
 

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.

n°1255598
yovel
aide les autres ils t'aideron
Posté le 29-11-2005 à 21:12:14  profilanswer
 

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

n°1255602
yovel
aide les autres ils t'aideron
Posté le 29-11-2005 à 21:14:28  profilanswer
 

mon probleme en matlab

n°1255647
gocho
Posté le 29-11-2005 à 22:12:03  profilanswer
 

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

n°1256032
Sve@r
Posté le 30-11-2005 à 14:59:58  profilanswer
 

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.
mood
Publicité
Posté le 30-11-2005 à 14:59:58  profilanswer
 

n°1256187
blackgodde​ss
vive le troll !
Posté le 30-11-2005 à 17:17:25  profilanswer
 

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 )-

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Probleme declaration fonction

 

Sujets relatifs
vecteur de poiteur sur fonctionLien de téléchargement en fonction de la date ?
[VBS][RESOLU] Fonction "Replace" non-case-sensitivetrouver une date en access en fonction d'un certain nb de jours
Problème avec la commande ISDATEproblème sous mozilla
Problème avec les double floatProblème avec la fonction OnTimer() sous vc++
problème avec une pile 
Plus de sujets relatifs à : Probleme declaration fonction


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR