Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  17 1062
Er det noen som vet hva return svar; gjør? Jeg får samme svar om jeg bruker den, eller ikke bruker den i funksjonen "beregnSvar". Har lest litt om det, noe om at den returnerer verdien til svar? Men det er ikke logisk, siden jeg får verdien selv om jeg ikke bruker "return svar;"

Setter pris på alt hjelp!

Kode

#include "stdafx.h"
#include <iostream>

using namespace std;
int beregnSvar(int tall1, int tall2, char regneart);

int main()
{
	int tall1;
	int tall2;
	char regneart;

	cout << "Skriv regnestykket " << endl;
	cin >> tall1 >> regneart >> tall2;
	int svar = beregnSvar(tall1, tall2, regneart);
	cout << tall1 << " " << regneart << " " << tall2;
	cout << " = " << svar << endl;

	return 0;
}  //main

//--------------------------------------

// Funksjon som beregner sum eller differanse
//
int beregnSvar(
	int tall1,
	int tall2,
	char regneart)
{
	int svar;
	if (regneart == '+') 
	{
		svar = tall1 + tall2;
	} //if
	else if (regneart == '-')
	{
		svar = tall1 - tall2;
	}

	else if (regneart == '*')
	{
		svar = tall1 * tall2;
	}
	else if (regneart == '/')
	{
		svar = tall1 / tall2;
	}
	else
	{
		cout << "Please use: + - * or / !" << endl;
	}
	return svar;
} //beregnSvar
OBS: Dette er C++
The Lone Deranger
bipbapbop's Avatar
Tja.

int basj;

basj = beregnSvar(1,1,+);

hvis funksjonen funker vil basj inneholde 2.
Sist endret av bipbapbop; 26. januar 2012 kl. 10:28.
"Return" gjør akkurat det du sier at den gjør. Når du skriver svar = beregnSvar() så får da variabelen "svar" samme verdi som det beregnSvar() returnerer. Jeg er ikke så kjent med C++ så jeg vet ikke hvorfor det fungerer for deg uten å ha med return. Men det er uansett en god vane å bruke "return" når man har mulighet til det.

Prøv f.eks å skriv "return 1" i beregnSvar(), så vil du nok se at svaret ditt alltid vil bli 1 uansett.
Jeg har ikke enormt med erfaring innen C++, men har nå litt. Det du sier virker veldig ulogisk, men jeg skal prøve å teste det når jeg kommer hjem fra jobb om du ikke har funnet ut av det. Jeg tror du er dømt til å få kompileringsfeil når du deklarere en metode int (du sier eksplisitt at den skal returnere en int-verdi), uten å faktisk returnere verdien. "svar" er en lokalt deklarert variabel i main-metoden, så den vil ikke bli tildelt verdien uten en return. Om du har kopiert en fil rett inn i VS er det godt mulig at du jobber mot feil fil. Prøv å fjern helt andre viktige deler, og se om det fremdeles funker.
Sist endret av Restyle; 26. januar 2012 kl. 10:36.
Takk for raskt tilbake melding

Selv om jeg fjerner return svar; (i beregnSvar()) eller bytter det om til return 1; så regner den helt fint.
Det virker ikke som at return gjør noe :S
Hva skjer om du fjerner hele metoden beregnSvar()?
The Lone Deranger
bipbapbop's Avatar
Funker faktisk .. du deklarerer jo svar 2 ganger .. 1 gang i main og 1 gang i funksjonen ..

Og skriver jeg "return 1" i funksjonen så blir svaret alltid 1.

Hvilken compiler bruker du?

Såvidt jeg vet er variabler lokale .. så int svar i funksjon er ikke samme variabel som int svar i main.

Derfor er det jævlig rart at du får samme verdi om du returnerer svar (fra funksjonen) eller returnerer 1.
Sist endret av bipbapbop; 26. januar 2012 kl. 10:59.
Sitat av Restyle Vis innlegg
Hva skjer om du fjerner hele metoden beregnSvar()?
Vis hele sitatet...
Når jeg fjernet den, så fikk jeg kompilerings feil. Så jeg trenger å bruke return.

Sitat av aricz Vis innlegg
Funker faktisk .. du deklarerer jo svar 2 ganger .. 1 gang i main og 1 gang i funksjonen ..

Og skriver jeg "return 1" i funksjonen så blir svaret alltid 1.

Hvilken compiler bruker du?
Vis hele sitatet...
Etter jeg prøvde å bruke "return 1; så ble svaret 1! Jeg vet ikke hvorfor det ikke ble 1 første gang jeg prøvde det... Jeg prøde akkurat det samme litt før, men så plutselig fungerte det (veldig rart).

Så det jeg forstår er at return svar; returnere resultet til svar opp til

Kode

int svar = beregnSvar(tall1, tall2, regneart);
- og dermed får main() vite hva svaret er som ble laget og definert i beregnSvar()

Jeg skal holde et øye med return i fremtiden når jeg lærer mer om programmering i all sin helhet.
Du har nok blingset og enten glemt å lagre filen eller glemt å kompilere eller noe, for beskrivelsen av situasjonen uten return gir ingen mening.
Hvis du lager en metode med retur verdi, så er det påkrevd å returnere på det formatet som er satt i deklarasjonen.

Så i C++ , når du for eks. I header filen (eller som over) deklarerer metoden din

Int minmetode(int tall1 , int tall2);

Sier du at metoden tar i mot 2 variabler av typen int og skal returnere en verdi av int.

Lager du en void metode, returnerer den ikke noen verdi :-)
Noen som vet hvordan man kan returnere flere enn en verdi?
Sitat av Akimoto873 Vis innlegg
Noen som vet hvordan man kan returnere flere enn en verdi?
Vis hele sitatet...
Det kan du ikke.
Jeg trodde (iallefall nå) at return ble brukt som status på hvorvidt funksjonen ble utført med success eller ikke.
return 0; = null feil
return 1; = feil?

Ville det ikke vært bedre og lagre data fra den funksjonen i en global variabel?
altså en variabel man definerer (og setter til 0) utenfor main funksjonen?

Eller er det bare jeg som loker nå?
Sitat av Akimoto873 Vis innlegg
Noen som vet hvordan man kan returnere flere enn en verdi?
Vis hele sitatet...
Du kan returnere en liste med verdier. I C vil vel det si å returnere en peker til et array eller en struct, alt ettersom hva som passer best.
NOOOOOOOOOOOOOOOOOO-
robhol's Avatar
Sitat av lockhead Vis innlegg
Jeg trodde (iallefall nå) at return ble brukt som status på hvorvidt funksjonen ble utført med success eller ikke.
return 0; = null feil
return 1; = feil?

Ville det ikke vært bedre og lagre data fra den funksjonen i en global variabel?
altså en variabel man definerer (og setter til 0) utenfor main funksjonen?

Eller er det bare jeg som loker nå?
Vis hele sitatet...
Det du tenker på her er vel kanskje main()-metoden i programmer. Som generell regel: ja, det er feil. Hvis du tenker på en "vanlig" boolsk funksjon, er konvensjonen å returnere true ved suksess. Merk at true og false er forskjellig fra, la oss si, 1 og 0.

C/C++ lar deg "jukse" ved at 0 = false og andre tall = true, men dette er helst ikke noe man bør belage seg på. Koden blir mindre klar av å slenge rundt masse tall, enn å si klart fra om hva som er en boolsk variabel og bruke de riktige konstantene.
Sitat av Phenobix Vis innlegg
Det kan du ikke.
Vis hele sitatet...

Det går helt fint å returnere flere verdier så lenge det er en array av en sort, eller det er definert som en enum/struct eller noe i den duren om jeg ikke husker feil.
Det har lenge vært en del av standarden i både C og C++ at main kan returnere 0 implisitt. Og i hvert fall med både gcc og g++ er det mulig å droppe eksplisitt return-verdi i andre funksjoner også, hvor funksjonen da vil returnere verdien til den variabelen som sist ble satt. Eksempler:

Kode

int implicit_return_1(int a, int b){        // Returnerer resultatet av a+b
    int d = 3;
    int c = a+b;
}

int implicit_return_2(int a, int b){        // Returnerer 3
    int c = a+b;
    int d = 3;
}

int implicit_return_3(int a, int b){        // Returnerer 1082130432
    int c = a+b;
    float d = 4;
}
Dette kan virke som udokumentert atferd, men om det er bevisst og komplilatoravhengig, en del av en godt gjemt standard eller et resultat av minnehåndteringen er jeg ikke sikker på. Men uansett, at det er mulig betyr ikke at det er spesielt smart, noe som kommer spesielt tydelig frem i det siste eksempelet.

Sitat av niktho Vis innlegg
Det går helt fint å returnere flere verdier så lenge det er en array av en sort, eller det er definert som en enum/struct eller noe i den duren om jeg ikke husker feil.
Vis hele sitatet...
Problemet er at arrays i C og C++ ikke har noen form for boundary checking, pluss at du må returnere en peker til det første elementet i arrayet i stedet for alle array-elementene, og arrayet kan fort bli slettet eller endret når funksjonen som deklarerte den er ferdig. Så å returnere arrays er dårlig business i C og C++, men du kan returnere andre datatyper som STL-containerne vector, deque, list også videre.
Sist endret av Provo; 28. januar 2012 kl. 13:22.
Skal sies at mens å ikke ha return gjerne fungerer bra i forhold til at koden kjører, så kan dette skape problemer for branch prediction (http://en.wikipedia.org/wiki/Branch_prediction) og føre til dårligere ytelse. Som regel ikke så veldig viktig, men hvis det er en viktig funksjon er det lurt å alltid ha en return. Et annet poeng kan være at det er lurt å kun returnere ett sted og så heller sette en variabel forskjellige steder i koden sånn at det blir lettere å forholde seg til koden senere.