Miten palauttaa aliohjelmasta useampi tieto

aloittelija ohjelmoija

Aliohjelma laskeskelee useampia asioita... Miten aliohjelmasta palautetaan useampia tietoja (paluuarvoja)?

4

393

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • ..

      ... joka osoittaa structiin tai taulukkoon. Oletan kielenä olevan C, koska et maininnut. Varaa muistia funktiossa, kopioi arvot sinne ja palauta muistin osoitin. Funktiota kutsuvan vastuulla on sitten vapauttaa muistialue.

      Jos funktiota kutsutaan usein, tehokkaampi vaihtoehto on vaatia parametreinä "työalue" (ja sen koko) jonne data kopioidaan. Jos koko ei riitä, paluuarvona annetaan riittävä muistialueen koko. Näin funktiota kutsuva voi varata muistin etukäteen ja uusiokäyttää samaa varattua aluetta monta kertaa. Tämä tekee kutsumisesta työläämpää, mutta kokonaisuus on nopeampi, koska muistin varaus ja vapautus on usein melko hidas operaatio.

      Voit myös aina määritellä funktion parametreinä osoittimia. Tällöin paluuarvoa käytetään perinteisesti vain virhetilanteiden raportointiin.

      include errno.h
      include stdio.h

      int funktio(int luku1, luku2, int *summa, int *vahennys)
      {
      if(summa == NULL || vahennys == NULL)
      return EFAULT; /* Ohjelman sisäisien NULL-arvojen tutkimista tulisi välttää, paitsi kun ollaan esim. tekemisissä ulkopuolelta tulevan datan kanssa. Rakenteesta tulisi tehdä sellainen, että NULL-arvot eivät ole mahdollisia. Debug-versioissa tietysti käytetään ASSERT:teja yms. Tässä esimerkin vuoksi virheiden palautuksesta. EFAULT on standardikirjaston virhekoodi, bad address, invalid pointer, yms. */
      *summa = luku1 luku2;
      *vahennys = luku1 - luku2;
      return 0; /* 0 = ei virhettä */
      }

      int main()
      {
      int summa, vahennys;
      if(funktio(5, 3, &summa, &vahennys)==0)
      printf("summa=%d vahennys=%d\n", summa, vahennys);
      return 0;
      }

      • gsssdf

        Eikös siis tartte return lausekkeella palauttaa noita arvoja vaan ne menee jo tuossa: *summa = luku1 luku2; *vahennys = luku1 - luku2;

        (Tai siis onhan tuossa tuo return 0;)


      • aloittelija ohjelmoija
        gsssdf kirjoitti:

        Eikös siis tartte return lausekkeella palauttaa noita arvoja vaan ne menee jo tuossa: *summa = luku1 luku2; *vahennys = luku1 - luku2;

        (Tai siis onhan tuossa tuo return 0;)

        Jep ehdinkin testata tätä asiaa ja tein itse tällaisen

        #include
        #include

        int funktio(int luku1, int luku2, int *summa, int *vahennys);

        int main()
        {
        int summa, vahennys;
        int luku1=5;
        int luku2=2;

        funktio( luku1, luku2, &summa, &vahennys);

        printf("summa=%d vahennys=%d\n", summa, vahennys);

        getche();
        return 0;
        }

        int funktio(int luku1, int luku2, int *summa, int *vahennys)
        {

        *summa = luku1 luku2;
        *vahennys = luku1 - luku2;

        return 0; /* 0 = ei virhettä */
        }


        Kiitoksia neuvoista, pääsin ehkä jyvälle asiasta.


      • aloittelija ohjelmoija
        aloittelija ohjelmoija kirjoitti:

        Jep ehdinkin testata tätä asiaa ja tein itse tällaisen

        #include
        #include

        int funktio(int luku1, int luku2, int *summa, int *vahennys);

        int main()
        {
        int summa, vahennys;
        int luku1=5;
        int luku2=2;

        funktio( luku1, luku2, &summa, &vahennys);

        printf("summa=%d vahennys=%d\n", summa, vahennys);

        getche();
        return 0;
        }

        int funktio(int luku1, int luku2, int *summa, int *vahennys)
        {

        *summa = luku1 luku2;
        *vahennys = luku1 - luku2;

        return 0; /* 0 = ei virhettä */
        }


        Kiitoksia neuvoista, pääsin ehkä jyvälle asiasta.

        siis include stdio ja conio


    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Katso: Ohhoh! Miina Äkkijyrkkä sai käskyn lähteä pois Farmi-kuvauksista -Kommentoi asiaa: "En ole.."

      Tämä oli shokkiyllätys. Oliko tässä kyse tosiaan siitä, että Äkkijyrkkä sanoi asioita suoraan vai mistä.... Tsemppiä, Mi
      Tv-sarjat
      130
      5115
    2. Voi kun mies rapsuttaisit mua sieltä

      Saisit myös sormiisi ihanan tuoksukasta rakkauden mahlaa.👄
      Ikävä
      32
      3217
    3. Haluan jutella kanssasi Nainen

      Olisiko jo aika tavata ja avata tunteemme...On niin paljon asioita joihin molemmat ehkä haluaisimme saada vastaukset...O
      Ikävä
      16
      1837
    4. Poliisiauto Omasp:n edessä parkissa

      Poliisiauto oli parkissa monta tuntia Seinäjoen konttorin edessä tänään. Haettiinko joku tai jotain pankista tutkittavak
      Seinäjoki
      22
      1810
    5. Onko mies niin,

      että sinulle ei riitä yksi nainen? Minulle suhde tarkoittaa sitoutumista, tosin eihän se vankila saa olla kummallekaan.
      Tunteet
      19
      1665
    6. Voitasko leikkiä jotain tunnisteleikkiä?

      Tietäisi ketä täällä käy kaipaamassa.. kerro jotain mikä liittyy sinuun ja häneen eikä muut tiedä. Vastaan itsekin kohta
      Ikävä
      71
      1511
    7. Tietysti jokainen ansaitsee

      Hän varmasti ansaitsee vain parasta ja sopivinta tietenkin, suon sen onnen hänelle enemmän kuin mielelläni. Aika on nyt
      Ikävä
      11
      1365
    8. Armi Aavikko Malmin hautausmaa

      Haudattiinko Armi arkussa Malmin hautausmaalle vai tuhkattiinko hänet? Kuka tietää asiasta oikein?
      Kotimaiset julkkisjuorut
      11
      1286
    9. Miksi näin?

      Miksi vihervassut haluaa maahan porukkaa jonka pyhä kirja kieltää sopeutumisen vääräuskoisten keskuuteen? Näin kotoutumi
      Maailman menoa
      19
      1267
    10. Haluisin suudella ja huokailla

      ja purra kaulaasi ja rakastella sinua. Haluisin puristella rintojasi ja pakaroitasi. Ei sinulla taida olla kuitenkaan ni
      Ikävä
      16
      1267
    Aihe