[fonction en langageC]

Fermé
lehbib
Messages postés
4
Date d'inscription
jeudi 29 juin 2006
Statut
Membre
Dernière intervention
30 juin 2006
- 30 juin 2006 à 00:49
Char Snipeur
Messages postés
9688
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
2 octobre 2020
- 30 juin 2006 à 17:21
Bonjour j'ai réalisé un petit code de fonction qui a pour but d'inviter l'utilisateur à entrer des valeurs cette fonction ne renvoit aucune valeur et prend pour argument deux structures.En execuant le programme tout marche bien sauf que les valeurs saisis par l'utilisateur ne se sont pas rangées dans les variables des deux structures SVP m'aider à resoudre ce probléme

3 réponses

Slt,
Pour que ton petit code marche, il faut déja savoir que pour faire passer des valeurs à une fonction donnée, on a deux facons :
la premiére, c'est de faire un passage par valeur, c'est a dire que tu va passer à la fonction, que les valeurs dont elle aura besoin
alors, que le deuxiéme choix, c'est de lui passer les adresses de ces valeurs que la fonction veut exploiter par la suite.
voici un petit code, pour illustrer les deux méthodes

/* Passage par valeurs */

#include<stdio.h>
#include<conio.h>

/* Fonction qui calcule le carré d'un entier */
int car_val(int x) /* On a déclaré un entier qui va contenir la valeur qu'on veut calculer */
{return (x*x);} /* On retourne le résultat */

main()
{int y;
clrscr();
printf("Donner une valeur \n");
scanf("%d",&y);
printf("La carré de %d, est : \n",y,car_val(y)); /* On affiche directement le resultat en affectant à la fct la velur qu'on veut calculer */
getch();
return 0;}



/* Passage par adresse */

#include<stdio.h>
#include<conio.h>

/* Fonction qui calcule le carré d'un entier */
int car_adr(int *x) /* On déclare un pointeur sur un entier, qui va contenir l'adresse de la valeur qu'on veut calculer */
{return ((*x)*(*x));} /* On retourne le résultat */

main()
{int y;
clrscr();
printf("Donner une valeur \n");
scanf("%d",&y);
printf("La carré de %d, est : \n",y,car_adr(&y)); /* On affiche directement, en affectant à la fct l'adresse de la valeur qu'on veut calculer */
getch();
return 0;}

enjoy it man, ++
1
lehbib
Messages postés
4
Date d'inscription
jeudi 29 juin 2006
Statut
Membre
Dernière intervention
30 juin 2006
1
30 juin 2006 à 16:16
Slt,

Meci pour ...mais ma fonction est un peu différente.voici mon code et a vous de le tester.
----------------------------------------------------------------
#include<stdio.h>

struct temps{
int heures;
int minutes;
int secondes;
};
struct temps t1,t2;
void entree(struct temps x);

main()
{

entree(t1);
entree(t2);

void entree(struct temps x)
{
printf("\nEntrez le temps separé par des espaces: ");
scanf("%d%d%d",&x.heures,&x.minutes,&x.secondes);
}

}
----------------------------------------------------------------------------
si vous consultez les valeus saisis,vous trouverez comme pour les heures,les minutes,et les secondes, la meme valeur 0.
1
Char Snipeur
Messages postés
9688
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
2 octobre 2020
1 327
30 juin 2006 à 17:21
Salut.
Tu n'a pas intégrer, ou compris le message. Tu fait un passage par valeur, il est donc normal que tu ne modifie pas t1 et t2 !
il faut modifier ta fonction entrée. Deux solution :
·recommander : void entree(temps*)
et pour l'apperl : entree(&t1);
·peu recommander, voire déconseiller : void entree(temps& x)
que tu apel : entree(t1)
Les deux fonctionne mais la deuxième a quelques réserve car il n'est pas explicite que ta variable puisse être modifié.
Pour finir, à ta place, je ferai un constructeur dans ta struct :
struct temps{
// tes variable
temps temps(){printf...//reste de la fonctione entree
}
ou une méthode.
comme ça, tu fait dans le main : t1.entree() et tu n'a pas de souci de passage de variable !
0