Fonction qui renvoie deux nombres

[Résolu]
Signaler
Messages postés
32
Date d'inscription
mardi 10 février 2004
Statut
Membre
Dernière intervention
22 août 2005
-
Messages postés
3
Date d'inscription
mercredi 15 novembre 2000
Statut
Membre
Dernière intervention
27 mai 2005
-
Salut à tous, j'aimerais créer une fonction qui me renverra le nombre d'erreurs, et un autre nombre. Je ne sais pas quoi faire, mis à part réecrire tout mon code en Objet! Existe-t-il une autre méthode? J'ai en effet entendu parler des structures, mais ce n'était pas très clair!

PS : Connaissez vous des API plus simple que celles utilisées par Borland ou VC++? ainsi que les tutoriaux les accompagnant

Trystan007

6 réponses

Messages postés
573
Date d'inscription
samedi 16 novembre 2002
Statut
Membre
Dernière intervention
9 avril 2008
1
Salut,


int main()
{
int sortie1;
int sortie2;
SommeEtSoustraction(15, 6, &sortie1, &sortie2);
// Et la sortie1= 15+6=21// sortie215-6 9
}

SommeEtSoustraction(int a, int b, int *s1, int *s2)
{
*s1 = a+b;
*s2 = a-b;
}

En gros tu balances à la fonction les paramètres d'entrés mais aussi les adresses des variables où tu veux que les resultats soient stockés (ces variables doivent bien sur exister).
La fonction écrira à l'adresse de ces variables donc celles-ci seront modifiées.

@+
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
Tu peux soit remplir une structure globale que tu pourras utiliser dans la fonction appelante, soit renvoyer le pointeur d'une structure que tu auras alloué dynamiquement dans la fonction (il faut utiliser l'allocation dynamique et ensuite la desallouer dans la fonction appellante), soit, si tes nombres le permettent ( < 2^16), les 'coller' dans un entier que tu renverras (mettre un nombre dans la partie haute, et l'autre dans la partie basse).

+2(p - n)
Messages postés
241
Date d'inscription
mardi 29 octobre 2002
Statut
Membre
Dernière intervention
23 janvier 2006

Je suis d'accord avec la réponse de Galzima, mais ca peut vite devenir
"sale" comme code, ou on confond les entrees et les sorties. La
solution est soit de specifier avec une macro inutile si le parametre
est IN, OUT ou INOUT (comme dans l'API Windows), ou alors de renvoyer
une... structure.



struct res

{

int s1;

int s2;

}



struct res SommeEtSoustraction(int a, int b)

{

struct res r;

r.s1 = a+b;

r.s2 = a-b;

return r;

}





Ce n'est pas de l'objet, du C ANSI (standard)
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
41
tu peux aussi renvoyer un pointeur de deux int...

soit une structure, soit tu fais un pointeur, soit tu fais un tableau, soit tu fais :
a est un char
b est un char
c est l'int que tu va renvoyer
c=a+b*256;

et dans la fonction qui a appelée :

a=c%256;
b=(c-a)/256;

In a dream, I saw me, drop dead... U was here, U cried... It was just a deam, if I die, U won't cry, maybe, U'll be happy

[url]http://coucou747.hopto.org/url
Messages postés
32
Date d'inscription
mardi 10 février 2004
Statut
Membre
Dernière intervention
22 août 2005

C'est bon, je n'avais pas pensé aux pointeurs, merci.

Trystan007
Messages postés
3
Date d'inscription
mercredi 15 novembre 2000
Statut
Membre
Dernière intervention
27 mai 2005

Je suis d'accord avec mes collègues qui ont suggérer d'utiliser deux pointeurs
commne ça le prb est terminé.
void revoie(int * nbr1,int *nbr2)
et dans la fct main tu les appelles par leurs adresses
renvoie(&n1,&n2);

Ceci n'est pas la seule méthodes bien sur