Miten palauttaa aliohjelmasta useampi tieto

aloittelija ohjelmoija

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

4

435

    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. Janne Ahonen E R O A A

      Taas 2 lasta jää vaille ehjää perhettä!
      Kotimaiset julkkisjuorut
      147
      2589
    2. En kai koskaan saa sinua

      Koska et usko että riitäisit minulle. Olet aina pitänyt itseäsi liian risana ja heikkona. Katkot korkeutesi, ja poraat k
      Ikävä
      154
      1659
    3. Terveystalon lääkärit ylilaskuttaneet

      Tämän pörriäiset osaavat, laskuttamisen. Terveystalo myöntää asian. https://www.hs.fi/suomi/art-2000011134269.html "K
      Maailman menoa
      133
      1633
    4. Saran ökytyyli käänsi katseita.

      On nyt kyllä Sara kasvoistaan, kuvan perusteella todellakin pyöristynyt ainakin kuvan perusteella.
      Kotimaiset julkkisjuorut
      149
      1358
    5. Nyt on aika laittaa parit selkoon.

      Onko pareja täällä. Laita kirjaimet kuka tykkää kenestäkin ?
      Ikävä
      66
      1338
    6. The Summit Suomi: Maxie avaa hyytävästä tilanteesta kuvauksissa: "Veri roiskui ja tajusi, että..."

      Oletko seurannut The Summit Suomea? Tykkäätkö vai et tai mitä mieltä ylipäätään olet sarjasta? Moni katsoja on kaikonnut
      Tv-sarjat
      13
      1180
    7. Työttömille lusmuille luvassa lisää keppiä

      Hallitus aikoo kiristää velvoitteiden laiminlyönnistä seuraavia työttömyysturvan karensseja ensi vuodesta alkaen. Hall
      Maailman menoa
      282
      1165
    8. Ootko huomannut miten

      pursuat joka puolelta. Sille joka luulee itsestään liikoja 🫵🙋🏻‍♂️
      Ikävä
      156
      976
    9. Miksi ihmeessä?

      Erika Vikman diskattiin, ei osallistu Euroviisuihin – tilalle Gettomasa ja paluun tekevä Cheek
      Ateismi
      22
      924
    10. Tiedän kaiken sinusta ja kaikesta

      Tiedän miten kärsit. Tiedän millanen oikeesti oot. Tiedän miksi valehtelit, tiedän miksi satutit mua. Tiedän mitä tapaht
      Ikävä
      58
      889
    Aihe