Miten palauttaa aliohjelmasta useampi tieto

aloittelija ohjelmoija

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

4

460

    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. Kaipaamasi miehen nimi?

      Ja maakunta tai kaupunki?
      Ikävä
      43
      7525
    2. Oletko keskustellut kaivatustasi muiden

      Kanssa lähiaikoina? Jos, onko keskustelu ollut positiivista tai negatiivista? Vaikuttaako keskustelut mielipiteeseesi ka
      Ikävä
      55
      3727
    3. Ennen ei ollut persuja ja työttömyyttä, lääkäriinkin pääsi

      Ennen oli kaikilla töitä Kauppiaille kelpasi kun saivat voittoa Yritystukia ei ollut Lääkäriin pääsi kaikki haluklaat Nu
      Maailman menoa
      53
      3619
    4. Millaista läheisyyttä

      Toivoisit ikävästi kohteesi kanssa?
      Ikävä
      86
      3412
    5. Tulipalossa henkilövahinkoja, itsenäisyyspäivä alkoi huonosti, poliisi tiedottaa lisää

      Savonlinna https://www.como.fi/uutiset/savonlinna-henkilovahinkoja-tulipalossa-poliisi-tiedottaa-lisaa/
      Savonlinna
      55
      3403
    6. 51
      3044
    7. Kyllä on Vasemmistoliitosta Koskelan johdolla tullut todellinen ääripuolue

      se on niin tulipunainen kuin olla voi, ja selvästi haluaa jatkuvasti eripuraa, ja repiä kansaa kahtia. Siinä on jo vuod
      Maailman menoa
      36
      2852
    8. Antifasismi - mitä se on?

      Se on äärivasemmistolaista anarkistista toimintaa joka käyttää fasisminvastaisuutta keppihevosena oikeuttaakseen toimint
      Maailman menoa
      30
      2494
    9. IL- KELA:n pääjohtaja, lääke- ja oikeustieteen tohtori Lasse Lehtonen sekavassa tilassa Brysselissä!

      "Iltalehden tietojen mukaan Lehtosen käytös Brysselin lentokentällä on herättänyt huomiota, ja hänen olemuksensa on tulk
      Maailman menoa
      198
      1965
    10. Heräsin taas ikävään

      Ja aivan valtavaan haluun. Tahdon sinua R. ❤️
      Ikävä
      47
      1571
    Aihe