Øsse Skrevet 7. mars 2002 Del Skrevet 7. mars 2002 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
kilogram Skrevet 8. mars 2002 Del Skrevet 8. mars 2002 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
Øsse Skrevet 8. mars 2002 Forfatter Del Skrevet 8. mars 2002 Takk for hjelpen. PS! Jeg brukte Caps for å skille mellom sourcen, og vanlig tekst. Lenke til kommentar
CaSh Skrevet 24. mai 2002 Del Skrevet 24. mai 2002 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
Coq Rouge Skrevet 7. juni 2002 Del Skrevet 7. juni 2002 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
CaSh Skrevet 11. juli 2002 Del Skrevet 11. juli 2002 Jeg skjønte ikke en dritt av det du sa der :razz: Lenke til kommentar
kilogram Skrevet 12. juli 2002 Del Skrevet 12. juli 2002 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
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå