[C] Petite question sur la commande 'return'

Petite question sur la commande 'return' [C] - C - Programmation

Marsh Posté le 03-03-2006 à 20:01:46    

Bonosir!
voila j'ai une question (comme pas mal de gens ici lol) pour faire un programme en C
je m'entraine a utiliser la commande 'return' et j'ai ici un petit probleme
 
j'ai une fonction, appelons la 'fonction' qui me calcule 2 valeurs, et une fonction main, dans laquelle je dois recuperer ces valeurs et les afficher
 
pour l'instant j'ai un truc qui ressemble a
 
int fonction (int x, int y)  
{
---
--
return a, b;
}
 
main()  
{
---
----
printf("%d et %d",fonction(x, y))  
}
 
a la place des %d dans mon printf j'aimerai donc afficher le couple de reponses A et B obtenu grace a 'fonction', le probleme est que en faisant comme ça, j'ai des valeurs assez folkloriques qui s'affichent...
qqn a une idée alors pour afficher mes 2 valeurs a et b en modifiant un peu cette ecriture??
merci bcp :)

Message cité 1 fois
Message édité par reiboul le 03-03-2006 à 20:02:36

---------------
Amon Amarth, Dark Tranquillity, Opeth, Dimmu Borgir, In Flames, Children of Bodom, Kreator, Metallica... pas d'la musique de paidai tout sa :o
Reply

Marsh Posté le 03-03-2006 à 20:01:46   

Reply

Marsh Posté le 03-03-2006 à 20:21:10    

Un return ne renvoit qu'une seule valeur, si tu as besoin de plusieurs valeurs de retour, soit tu renvoies un tableau ou une structure, soit tu passes 2 arguments par pointeurs.


Message édité par LePhasme le 03-03-2006 à 20:21:31
Reply

Marsh Posté le 03-03-2006 à 20:28:34    

euh... sa depasse mon niveau de competences, la  :whistle:  
(et encore, si je devai me contenter des cours que je reçois a ma fac, je serai encore a ecrire des programmes qui affichent des 'hello world' :D)


---------------
Amon Amarth, Dark Tranquillity, Opeth, Dimmu Borgir, In Flames, Children of Bodom, Kreator, Metallica... pas d'la musique de paidai tout sa :o
Reply

Marsh Posté le 03-03-2006 à 21:17:30    

reiboul a écrit :

je m'entraine a utiliser la commande 'return' et j'ai ici un petit probleme


return n'est pas une 'commande', mais une 'instruction'.

Citation :


j'ai une fonction, appelons la 'fonction' qui me calcule 2 valeurs, et une fonction main, dans laquelle je dois recuperer ces valeurs et les afficher
 
pour l'instant j'ai un truc qui ressemble a


int fonction (int x, int y)  
{
---
--
return a, b;
}




Je ne sais pas qui t'a fait croire que ce code avait un sens, mais c'est faux. En fait, seule dernière valeur (la plus à droite) est retournée, soit ici, la valeur de b.


#include <stdio.h>
 
int f(void)
{
   return 1, 2;
}
 
int main(void)
{
   int x = f();
 
   printf ("x = %d\n", x);
 
   return 0;
}


Citation :


main()  
{
---
----
printf("%d et %d",fonction(x, y))  
}
 
a la place des %d dans mon printf j'aimerai donc afficher le couple de reponses A et B obtenu grace a 'fonction', le probleme est que en faisant comme ça, j'ai des valeurs assez folkloriques qui s'affichent...
qqn a une idée alors pour afficher mes 2 valeurs a et b en modifiant un peu cette ecriture??
merci bcp :)


Evidemment, ceci ne fonctionne pas du tout.
 
Soit tu passes l'adresse de 2 variables :  


  f (&a, &b);


avec f() défini comme suit :  


void f (int *pa, int *pb)
{
   ...
}


soit tu définis une structure


struct data
{
   int a;  
   int b;
};


que tu instancies:  


struct data results;


et dont tu passes l'adresse à la fonction


   f (&results);


La fonction étant définie comme suit :  


void f (struct data *p_results)
{
   ...
}


Message édité par Emmanuel Delahaye le 03-03-2006 à 21:19:36

---------------
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 03-03-2006 à 22:01:46    

Bon vu que mon niveau en C est relativement faible, je crois que pour le moment je vais me contenter d'une structure du type
 
 
int fonction (int x, int y)  
{
int a, b;
a=2*x;
b=4*a+y;
printf("%d et %d",a,b);
}
 
main()  
{
int x, y;
scanf("%d",&x);
scanf("%d",&y);
fonction(x,y);
}  
 
 
C'est un exemple totalement bidon bien sur, mais bon jusqu'a ce que je voie la structure que je voulais en cours, je crois que je v en rester la  :whistle:  
 
merci pour votre aide!  :hello:  :sol:


---------------
Amon Amarth, Dark Tranquillity, Opeth, Dimmu Borgir, In Flames, Children of Bodom, Kreator, Metallica... pas d'la musique de paidai tout sa :o
Reply

Marsh Posté le 06-03-2006 à 12:11:03    

ouais mais dans ce cas la tu n'utilises pas ton return :)

Reply

Marsh Posté le 06-03-2006 à 12:46:11    

reiboul a écrit :

 
main()  
{
int x, y;
scanf("%d",&x);
scanf("%d",&y);
fonction(x,y);
}  

Tant qu'à faire un prog "bidon" fais le correctement

Code :
  1. // attention au prototype de main
  2. int main (void)
  3. {
  4.   int x, y;
  5.   // scanf est d'un usage difficile, utilse plutôt de manière
  6.   // conjointe fgets et strtol.
  7.   // fgets(buf, sizeof(buf), stdin);
  8.   // x = strtol(buf, NULL, 10);
  9.   scanf("%d",&x);
  10.   scanf("%d",&y);
  11.   fonction(x,y);
  12.  
  13.   // un fonction doit renvoyer une valeur.
  14.   return 0;
  15. }


Reply

Marsh Posté le 06-03-2006 à 15:16:54    

boarf j'ai pas besoin que ma fonction main ne me renvoie qqchose :) y'a un interet a faire sa?


---------------
Amon Amarth, Dark Tranquillity, Opeth, Dimmu Borgir, In Flames, Children of Bodom, Kreator, Metallica... pas d'la musique de paidai tout sa :o
Reply

Marsh Posté le 06-03-2006 à 15:37:58    

reiboul a écrit :

boarf j'ai pas besoin que ma fonction main ne me renvoie qqchose :) y'a un interet a faire sa?


1 - c'est la regle
2 - ton système attend une valeur. Celle-ci doit être cohérente. Les valeurs portables sont :  

  • 0
  • EXIT_SUCCESS[1]
  • EXIT_FAILURE[1]


http://mapage.noos.fr/emdel/notes.htm#typemain
 
---------------
[1] Définies dans <stdlib.h>


Message édité par Emmanuel Delahaye le 06-03-2006 à 16:26:43

---------------
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 06-03-2006 à 15:43:23    

sa sert quand meme pas a grand chose dans un programme simple, non?
(du genre de ce qu'on programme en cours pour apprendre)


---------------
Amon Amarth, Dark Tranquillity, Opeth, Dimmu Borgir, In Flames, Children of Bodom, Kreator, Metallica... pas d'la musique de paidai tout sa :o
Reply

Marsh Posté le 06-03-2006 à 15:43:23   

Reply

Marsh Posté le 06-03-2006 à 15:57:33    

reiboul a écrit :

sa sert quand meme pas a grand chose dans un programme simple, non?
(du genre de ce qu'on programme en cours pour apprendre)


Si on ne le fait pas, le comportement est indéterminé. Maintenant, tu fais ce que tu veux.


Message édité par Emmanuel Delahaye le 06-03-2006 à 15:57:47

---------------
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 06-03-2006 à 16:13:30    

donc je suppose qu'il vaut mieu prendre les bonnes habitudes :)
merci de tes conseils!


---------------
Amon Amarth, Dark Tranquillity, Opeth, Dimmu Borgir, In Flames, Children of Bodom, Kreator, Metallica... pas d'la musique de paidai tout sa :o
Reply

Sujets relatifs:

Leave a Replay

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