Miten palauttaa aliohjelmasta useampi tieto

aloittelija ohjelmoija

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

4

429

    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. En voi jutella kanssasi

      tietenkään, mutta täällä voin sanoa sinulle, että se sinun hiljaisuutesi ja herkkyytesi eivät ole heikkoutta. Ne ovat ih
      Tunteet
      39
      5150
    2. Trump ja Vance murskasivat ja nolasivat Zelenskyn tiedotusvälineiden edessä Valkoisessa talossa.

      Jopa oli uskomaton tilaisuus Valkoisessa talossa. Zelensky jäi täydelliseksi lehdellä soittelijaksi suhteessa Trumpiin j
      Maailman menoa
      518
      1730
    3. Kokoomus haluaa hoitaa flussat yksityisellä, jotta säästettäisiin rahaa ja aikaa

      Mies hakeutui Terveystalo Kamppiin flunssaoireiden takia helmikuisena sunnuntai-iltana. Diagnoosiksi kirjattiin influens
      Maailman menoa
      77
      1100
    4. Rakkaus ei iloitse vääryydestä vaan iloitsee yhdessä TOTUUDEN kanssa.

      Tajuatteko, että jotkut ihmiset pitävät siitä, kun toiset kaatuvat? He nauttivat siitä, kun toiset mokaavat tai käyttävä
      Idän uskonnot
      359
      1008
    5. Koska olet rakastellut

      Kaivattusi kanssa viimeksi?
      Ikävä
      77
      943
    6. Anteeksi Pekka -vedätys

      Apuna Ry:n somessa levinnyt Anteeksi Pakka -kampanja saa aina vaan kummallisempia piirteitä. ”Mä pyydän anteeksi. Mä
      Maailman menoa
      53
      921
    7. Kumpi tästä

      Teidän tilanteesta teki vaikeaa? Sivusta
      Ikävä
      59
      870
    8. Kaikkia ei voi miellyttää

      Eikä ole tarviskaan. Hyvää huomenta ja mukavaa perjantaita. 😊❄️⚜️✌🏼❤️
      Ikävä
      228
      814
    9. Mikä on kaivattusi ärsyttävin piirre?

      Mun kaivattu on erittäin vastahakoinen puhumaan itsestä. Kääntää puheenaiheen aina muuhun kun hänestä tulee puhetta.
      Ikävä
      50
      803
    10. Päivi Ollila on tehnyt kunnallisvalituksen saadakseen pidettyä Tarja Pirkkalaisen virassa

      Kaupunginhallituksen puheenjohtaja Päivi Ollila on tehnyt kunnallisvalituksen kaupungin johtamisjärjestelyiden muutokses
      Haapavesi
      58
      738
    Aihe