Incohérence dans l'affichage d'un nombre par une fonction

Signaler
Messages postés
14
Date d'inscription
vendredi 20 octobre 2006
Statut
Membre
Dernière intervention
25 avril 2009
-
Messages postés
14
Date d'inscription
vendredi 20 octobre 2006
Statut
Membre
Dernière intervention
25 avril 2009
-
Bonjour à tous, je vous explique mon problème, la fonction afficher me renvoie toujours "Affichage du complexe :0 + i 0" alors que  les 0 devraient être les réels renseignés grâce à la fonction entree, merci davance.

#include <stdio.h>
#include <stdlib.h>
#include <math.h>


struct complexe
       {
       float reel;
       float imag;
       };

void entree(complexe c);
void affichage(complexe d);

int main()
{
  complexe ess;
  entree(ess);
  affichage(ess);
  system("PAUSE");   
  return 0;
}

void entree(complexe c)
{printf("entrer la partie reelle\n");
scanf("%f",&c.reel);
printf("entrer la partie imaginaire\n");
scanf("%f",&c.imag);
}

void affichage(complexe d)
{
printf("Affichage du complexe : %f + i %f \n",d.reel,d.imag);
}

4 réponses

Messages postés
21
Date d'inscription
mardi 18 janvier 2005
Statut
Membre
Dernière intervention
6 mars 2009

Salut,

C'est tout à fait normal. Lorsque tu appelles ta fonction "entree", le paramettre est passé par copie donc il n'existe que dans ta fonction "entree" (Lorsque que le programme sort de la fonction c, la variable "complexe c" est détruite).

Pour palier à ce probleme soit tu fais une fonction qui retourne ton complexe, soit tu passe un pointeur sur le complexe à ta fonction.

Ce qui donne comme prototype :
- complexe entree(complexe c);
ou
- void entree(complexe* c)

en espérant ne pas me tromper et être clair :)

++
Messages postés
14982
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
2 mars 2021
94
Hello,
Le passage par référence marche aussi bien: entree(complexe & c);
Avantage: ne change pas l'appel à la fonction

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Messages postés
21
Date d'inscription
mardi 18 janvier 2005
Statut
Membre
Dernière intervention
6 mars 2009

Effectivement :)
Messages postés
14
Date d'inscription
vendredi 20 octobre 2006
Statut
Membre
Dernière intervention
25 avril 2009

Merci de vos explications, vous m'avez bien éclairci.