Gå til innhold
🎄🎅❄️God Jul og Godt Nyttår fra alle oss i Diskusjon.no ×

Problemer med å forstå programmet!


Anbefalte innlegg

SE FØLGENDE PROGRAM:

 

#include <iostream>

 

int sum (int tall1, int tall2)

{

std::cout <<"I sum() er mottatt " << tall1 << " og " << tall2 << "n";

return (tall1+tall2);

}

 

int main()

{

std::cout <<"Jeg er i programmet!n";

std::cout <<"nog kaller funksjonen sumn";

std::cout <<"Verdien som blir returnert er: " << sum(3,4);

std::cout <<"nTilbake i programmetn";

std::cout <<"nAvslutternn";

return 0;

}

 

 

 

DETTE PROGRAMMET GIR FØLGENDE RESULTAT PÅ SKJERMEN:

 

Jeg er i programmet!

 

og kaller funksjonen sum

I sum() er mottatt 3 og 4

Verdien som blir returnert er: 7

Tilbake i programmet

 

Avslutter

 

 

KAN NOEN FORKLARE HVORFOR LINJEN "I sum() er mottatt 3 og 4" KOMMER UT PÅ SKJERMEN FØR LINJEN "Verdien som blir returnert er: 7" ?

DET VIRKER IKKE LOGISK FOR MEG NÅR JEG SER PÅ REKKEFØLGEN AV LINJENE I main.

Lenke til kommentar
Videoannonse
Annonse

Quote:


øsse87 skrev (2002-03-07 21:29):

SE FØLGENDE PROGRAM:


#include


int sum (int tall1, int tall2)

{

std::cout <<"I sum() er mottatt " << tall1 << " og " << tall2 << "n";

return (tall1+tall2);

}


int main()

{

std::cout <<"Jeg er i programmet!n";

std::cout <<"nog kaller funksjonen sumn";

std::cout <<"Verdien som blir returnert er: " << sum(3,4);

std::cout <<"nTilbake i programmetn";

std::cout <<"nAvslutternn";

return 0;

}

KAN NOEN FORKLARE HVORFOR LINJEN "I sum() er mottatt 3 og 4" KOMMER UT PÅ SKJERMEN FØR LINJEN "Verdien som blir returnert er: 7" ?

DET VIRKER IKKE LOGISK FOR MEG NÅR JEG SER PÅ REKKEFØLGEN AV LINJENE I main.


 

Ja, dette er ganske logisk. std::cout kallar på funksjonen sum. Funksjonen vert kjørt, og sidan denne funksjonen vert kalla før std::cout har vist noko på den linja, vil sum sin std::cout verta kalla først. Å setje ein funksjon som del av eit direkte output, vil gje denne effekten, omtrent som du tek ein variabel og legg verdien av sum inn i denne på linja over "verdien som blir returnert", og så legg du inn namnet på variabelen på "verdi-returnert" linja. Gjer deg oppmerksom på at eg ikkje kan C/C++, men dette er stort sett likt i alle programmeringsspråk.

 

PS! Ikkje skriv med CAPS heile vegen, det vert rekna som skriking.

 

mvh.,

Vegard A. Larsen,

moderator

Lenke til kommentar
  • 2 måneder senere...

omg, går det ikke ann å se denne logiske feilen??

 

Du skriver return sum(tall1+tall2);

 

Ser du ikke hva du gjør her?

Du summerer tallene når du returnerer dem. Så da blir verdien 7 :smile:

 

Skriv heller return sum(tall1,tall2); nå skal det fungerere :smile:

Lenke til kommentar
  • 2 uker senere...

Cash: Dette har ingen ting med det å gjøre. Problemet han hadde var at utskriften ble slik:

 

I sum() er mottatt 3 og 4

Verdien som blir returnert er: 7

 

Og ikke som forventet:

 

Verdien som blir returnert er:I sum() er mottatt 3 og 4

7

 

- som vel heller ikke var det ønskede utfallet vil jeg regne med.

 

Men det er en veldig enkel grunn til at det blir slik. I C/C++ er det standard at i alle fall ved bruk av << hos cout gjøres kall fra høyre mot venstre på linjen. Det vil si at det første som sendes inn på den utgående strømmen er det lengst til høyre. Siden dette her er et metode kall, vil denne metoden kalles først, og alt av utskrift vil bli gjordt før utskriften av den linjen som gjennomførte kallet. Eneste måten å unngå dette er å få med utskrift streamen inn i metoden du kaller, men det er litt mer avansert, og sjeldent ønskelig. Den dagen du er dyktig nok, vet du hva du ønsker og ha ut, og vet hvordan du får det til. Uansett, her er utskriften den det spørres etter, dermed må en heller ønske annen utskrift, eller akseptere at utskriften er som den er, for den er korrekt.

 

Coq Rouge (håper det der var forstålig)

Lenke til kommentar
  • 1 måned senere...

CaSh skrev (2002-07-11 20:55):

Jeg skjønte ikke en dritt av det du sa der  

 

Sjå på dei merka områda i koden:

 


int sum (int tall1, int tall2)

{

[b]std::cout[/b] <<"I sum() er mottatt " << tall1 << " og " << tall2 << "n";

return (tall1+tall2);

}



int main()

{

std::cout <<"Jeg er i programmet!n";

std::cout <<"nog kaller funksjonen sumn";

[b]std::cout <<"Verdien som blir returnert er: " << sum(3,4);[/b]

std::cout <<"nTilbake i programmetn";

std::cout <<"nAvslutternn";

return 0;

}

 

OK, når programmet kjem til linja


std::cout <<"Verdien som blir returnert er: " << sum (3,4);

vil det lesa fra høgre mot venstre. Dette vil medføre at funksjonen sum vil verte kalla før funksjonen std::cout, dette for at std::cout skal vete kva verdi sum eigentlig har.

 

sum i seg sjølv, har ein eigen std::cout før den returnerer. Difor vil det som sum har skrevet til skjermen, komma før "Verdien som blir returnert er: 7". Er du med no?

 

mvh.,

Vegard

 

[ endret av kilogram den 2002-07-12 21:08 ]

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...