Overføre variabler?

Tags:    c++ javascript

Er det muligt at overføre en variabel fra en function til selve programmet???

F.eks:

void alder(){
int alder = 13;
}
int main(){
alder();
cout << "Din alder er " << alder << endl;
}

Hvordan kan man gøre det?
I will Survive...



8 svar postet i denne tråd vises herunder
2 indlæg har modtaget i alt 2 karma
Sorter efter stemmer Sorter efter dato
Hvis en funktion skal returnere en værdi skal du enten gøre det gennem en call-by-reference variabel som du sender med som argument, eller (som nok ville være smartest her) ved en retur værdi.

f.eks.
<pre>
int alder(){
int age = 13;
return age;
}

//Retur værdien sat til int istedet for ingen (void)

int main(){

cout << "Din alder er " << alder() << endl;
return 0;
}
</pre>



[Redigeret d. 04/10-03 23:46:02 af Agge Kempff]



Hvis en funktion skal returnere en værdi skal du enten gøre det gennem en call-by-reference variabel som du sender med som argument, eller (som nok ville være smartest her) ved en retur værdi.

f.eks.
<pre>
int alder(){
int age = 13;
return age;
}

//Retur værdien sat til int istedet for ingen (void)

int main(){

cout << "Din alder er " << alder() << endl;
return 0;
}
</pre>



[Redigeret d. 04/10-03 23:46:02 af Agge Kempff]
Hmm...

Problemet er at jeg er igang med et MEGET simpelt spil til en af mine venner...
Her er koden så du kan se hvad jeg mener

void angreb(string type){
srand(time(NULL));
int skade = rand()%(int) (( 5 + 1) - (0))+ 0;
int liv = 50-skade;
cout << type << " skadede dig med " << skade << "\\nDu har nu " << liv << " i hitpoints\\n";
}

Jeg vil gerne have "int liv" til at blive overført til selve spillet så jeg har spillerens liv i main-delen

I will Survive...


Hej,

Så skal du få din "angreb" function til at returnere en int:
Fold kodeboks ind/udKode 


/Michael.



Hvis en funktion skal returnere en værdi skal du enten gøre det gennem en call-by-reference variabel som du sender med som argument, eller (som nok ville være smartest her) ved en retur værdi.

f.eks.
<pre>
int alder(){
int age = 13;
return age;
}

//Retur værdien sat til int istedet for ingen (void)

int main(){

cout << "Din alder er " << alder() << endl;
return 0;
}
</pre>



[Redigeret d. 04/10-03 23:46:02 af Agge Kempff]

Hmm...

Problemet er at jeg er igang med et MEGET simpelt spil til en af mine venner...
Her er koden så du kan se hvad jeg mener

void angreb(string type){
srand(time(NULL));
int skade = rand()%(int) (( 5 + 1) - (0))+ 0;
int liv = 50-skade;
cout << type << " skadede dig med " << skade << "\\nDu har nu " << liv << " i hitpoints\\n";
}

Jeg vil gerne have "int liv" til at blive overført til selve spillet så jeg har spillerens liv i main-delen

I will Survive...



Hvis en funktion skal returnere en værdi skal du enten gøre det gennem en call-by-reference variabel som du sender med som argument, eller (som nok ville være smartest her) ved en retur værdi.

f.eks.
<pre>
int alder(){
int age = 13;
return age;
}

//Retur værdien sat til int istedet for ingen (void)

int main(){

cout << "Din alder er " << alder() << endl;
return 0;
}
</pre>



[Redigeret d. 04/10-03 23:46:02 af Agge Kempff]
Hmm...

Problemet er at jeg er igang med et MEGET simpelt spil til en af mine venner...
Her er koden så du kan se hvad jeg mener

void angreb(string type){
srand(time(NULL));
int skade = rand()%(int) (( 5 + 1) - (0))+ 0;
int liv = 50-skade;
cout << type << " skadede dig med " << skade << "\\nDu har nu " << liv << " i hitpoints\\n";
}

Jeg vil gerne have "int liv" til at blive overført til selve spillet så jeg har spillerens liv i main-delen

I will Survive...

Hej,

Så skal du få din "angreb" function til at returnere en int:
Fold kodeboks ind/udKode 


/Michael.



Nu er jeg ikke lige helt sikker på hvordan det virker med livspointene der, men måske du skulle have din liv variabel ude i main og så sende den med hver gang du kalder angreb().
For her vil man få 50 liv - skade hver gang angreb bliver kaldt, hvilket lyder lidt forkert.


Hvis vi siger du laver en int LivPlayer = 50; //50 liv til player
ude i din main, og så overfører LivPlayer sammen med angreb hver gang, så er det den samme variabel du arbejder med hele tiden.

f.eks.
<pre>
void Angreb(int &liv){
srand(time(NULL));
int skade = rand()%(int) (( 5 + 1) - (0))+ 0;
liv = liv - skade;
}
</pre>

Sådan kaldes den: (fra main) Angreb(LivPlayer);
Her er hvad der sker:

liv = liv - skade; liv (som bliver overført i funktionen) bliver ændret til liv - skade. Da det er & foran i funktionserklæringen (call by reference), sker ændringen også uden i main. Dvs ude i din main er LivPlayer nu ændret til den nye værdi (der nu er mindre end 50)

Så skal du selv gå ind og tjekke om han har flere liv tilbage osv osv ude i main.

En anden variant kunne være en bool (sand/falsk) der returnerede værdien af om spilleren var i live efter angrebet. Altså i live = sand, død (liv <= 0) = falsk.

<pre>
bool Angreb(int &liv){
srand(time(NULL));
int skade = rand()%(int) (( 5 + 1) - (0))+ 0;
liv = liv - skade;
return (liv > 0);
}
</pre>

Ved dette statement: "return (liv > 0);" vil sandhedsværdien af førnævnte udtryk blive returneret.
Hvis spilleren stadig har liv så returnere den true (1) ellers false (0).

Du kunne så kalde funktionen fra main således at dne bruger det resultat til noget:

if(Angreb(LivPlayer)){
//Han lever stadig så spillet kører endnu
}
else{
cout << "Du er død, må du hvile i fred."
}






[Redigeret d. 05/10-03 11:18:28 af Agge Kempff]



Jeg kan ikke få det til at virke...

Her er en del af koden

Fold kodeboks ind/udKode 

Kan du ikke lave det om så det virker???



I will Survive...



Jeg er lidt i tvivl om hvordan du har struktureret det.
Men jeg har lige sat en lille main på, der kalder din level2 funktion.
Derudover har jeg efterfulgt det med gecth(); så du kan nå at se skærmoutputtet.



<pre>

#include <iostream>
#include <conio>

using namespace std;

void angreb(int &liv){
srand(time(NULL));
int skade = rand()%(int) (( 5 + 1) - (0))+ 0;
liv = liv - skade;
}
void level2(){
string valg1, valg2, valg3;
string go = "fremad";
string back = "tilbage";
string left = "venstre";
string right = "hoejre";
string up = "op";
string down = "ned";
string pick = "samle";
string open = "aaben";
string bash = "smadre";
int LivPlayer = 50;

cout << "Du staar inde i huset. Der er meget moerkt omkring dig.\\nDu hoerer en lyd til venstre for dig og pludselig springer der en mand \\nmed en kniv op foran dig.\\n\\n";
cout << "--Kamp mod en mand med kniv--\\n\\n";
cout << "Det var manden der overraskede dig saa han har foerste slag.\\n";
angreb(LivPlayer);
cout << "Knivmanden " << "angreb dig\\n" << "Du har nu " << LivPlayer << " i hitpoints\\n";
getch();
}

int main(){
level2();
return 0;
}

</pre>



Jeg er lidt i tvivl om hvordan du har struktureret det.
Men jeg har lige sat en lille main på, der kalder din level2 funktion.
Derudover har jeg efterfulgt det med gecth(); så du kan nå at se skærmoutputtet.



<pre>

#include <iostream>
#include <conio>

using namespace std;

void angreb(int &liv){
srand(time(NULL));
int skade = rand()%(int) (( 5 + 1) - (0))+ 0;
liv = liv - skade;
}
void level2(){
string valg1, valg2, valg3;
string go = "fremad";
string back = "tilbage";
string left = "venstre";
string right = "hoejre";
string up = "op";
string down = "ned";
string pick = "samle";
string open = "aaben";
string bash = "smadre";
int LivPlayer = 50;

cout << "Du staar inde i huset. Der er meget moerkt omkring dig.\\nDu hoerer en lyd til venstre for dig og pludselig springer der en mand \\nmed en kniv op foran dig.\\n\\n";
cout << "--Kamp mod en mand med kniv--\\n\\n";
cout << "Det var manden der overraskede dig saa han har foerste slag.\\n";
angreb(LivPlayer);
cout << "Knivmanden " << "angreb dig\\n" << "Du har nu " << LivPlayer << " i hitpoints\\n";
getch();
}

int main(){
level2();
return 0;
}

</pre>

Tak, det virker...

I will Survive...

Kan du li PHP???
Så tjek denne gruppe:
<a href=\\"http://www.udvikleren.dk/groups/?gid=132\\">PHP-Nørderne</a>



Det var så lidt. :)

Du kan jo bare maile her på udvikleren hvis der er noget. Vil altid gerne hjælpe, når bare jeg har tid.



t