Miten palauttaa aliohjelmasta useampi tieto

aloittelija ohjelmoija

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

4

404

    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. Metsäkoneen kuljettaja huuteli tutkijalle

      "voisit kyllä ottaa rintaliivit pois ennen kuin tulet minulle juttelemaan, hän sanoo." https://yle.fi/a/74-20106446 On
      Suomussalmi
      704
      10100
    2. Suomi on täysin sekaisin

      Jo ties monettako päivää hirveä itku ja poru jostain helvetin nilviäisistä. https://www.is.fi/taloussanomat/art-2000010
      Maailman menoa
      415
      4422
    3. Kaikki ei vieläkään usko luontokatoon.

      Suomussalmen Hukkajoella foliohattu metsäkoneen kuljettaja tuhosi tuhansia harvinaisia jokihelmisimpukoita eli raakkuja
      Kajaani
      91
      3036
    4. Sano vain suoraan, että nyt riittää

      ettei kiinnosta. Sano, että lopeta! En ihmettelisi, jos olet saanut tarpeeksesi ja toivot minun ymmärtävän lopettaa. Eh
      Ikävä
      43
      2865
    5. Ohhoh! Ex-pääministeri Sanna Marinin Joni-rakas paljasti ilouutisen: "Tässä kuussa..."

      Sanna Marin on ollut naimisissa Markus Räikkösen kanssa. Nyt hänen seurassaan on usein julkkishiusmuotoilija Joni Willb
      Kotimaiset julkkisjuorut
      55
      2674
    6. Mari Rantanen asettaa sairaan lapsen edun oman uransa edelle - (tekikö Marin samaa)

      Noin toimii kunnon vastuuntuntoinen äiti, mutta siitäkin nämä mt-ongelmaiset vasemmistolaiset häntä täällä haukkuvat. "
      Maailman menoa
      230
      2668
    7. Mitä ajattelet aina

      Kun hän tulee näköpiiriin?
      Ikävä
      153
      1855
    8. Luokatonta toimintaa

      Tyrmistyttävää toimintaa Stora Enson korjuu yrittäjältä Hukkajoella. Täyttä piittaamattomuutta laeista ja luontoarvoista
      Suomussalmi
      73
      1722
    9. Ensimmäisestä kohtaamisesta saakka

      minulla on ollut hämmentynyt olo. Miten voit tuntua siltä, että olisin tuntenut sinut aina? Sinun kanssasi on yhtä aikaa
      Ikävä
      14
      1630
    10. Maailmankuulu homopingviini on kuollut

      Minä niin toivoin että pariskunta olisi saatu kunniavieraiksi ensi kesän Prideen. 💔 "Maailmankuulu homopingviini on k
      Lapua
      6
      1433
    Aihe