Hogyan lehet C-ben egy függvény segítségével 2 visszatérési értéket kapni? A feladat így szól: Készíts függvényt, ami VISSZAADJA eredményül a kapott 20 valós szám közül a két legnagyobbat!
#include <stdio.h>
#include <math.h>
int prim(int p) {
int i,szam,max1=0,max2=0;
for (i=0;i<3;i++){
printf("Az %d. szam: \t",i+1);
scanf("%d",&szam);
if(szam>max1)
max1=szam;
}
return max1;
}
int prim2(int p) {
int i,szam,max1=0,max2=0;
for (i=3;i<6;i++){
printf("Az %d. szam: \t",i+1);
scanf("%d",&szam);
if(szam>max2)
max2=szam;
}
return max2;
}
main()
{
int szamok,max1,max2;
max1=prim(szamok);
max2=prim2(szamok);
if(max1>max2){
printf("A legnagyobb szam: %d",max1);
printf("\n");
printf("A 2. legnagyobb szam: %d",max2);}
if(max2>max1){
printf("A legnagyobb szam: %d",max2);
printf("\n");
printf("A 2. legnagyobb szam: %d",max1);}
}
Most csak 6-ig mentem, hogy ne kelljen 20-at beírni. De a probléma az ugyebár, hogy ha a 2 legnagyobb szám jelenesetben az 1. függvényben van akkor már rossz az egész.
1. Nem visszatérési értéket használsz, hanem kimenő paramétert (megadod paraméterben a változót, ahova az eredményt várod, és abba rakod bele az értéket)
2. Létrehozol egy struct-ot, amibe raksz egy minimum és egy maximum elnevezésű adattagot, és egy ilyen structot adsz vissza.
Kicsit figyelj oda!
Valós(!) szám. Nem egész szám. Szóval ide az int nem lesz jó, hanem float vagy double kell.
Harmadik megoldásként még szoktak olyat is elkövetni, hogy ha két float értéket kellene visszaadni, akkor azt becsomagolják egy double méretű helyre. Az egyik számot a felső 32 bitjén tárolják, a másikat pedig az alsó 32 bitjén. Hasonlóan egész számok esetében meg lehet csinálni, hogy egy int méretű helyre beraknak két short számot. Erre láthatsz példát a népszerű BASS hangkönyvtárban:
Ezt bitműveletekkel meg lehet csinálni. Csak nem árt, ha van két makród vagy függvényed, ami ki is tudja szedni a két számot ebből.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!