[c++] Funktionenproblem?!

Rain

Lieutenant
Dabei seit
Mai 2003
Beiträge
704
Hallo. Ich hoffe ihr könnt mir nen Hinweis für mein Problem geben. Ich muss dazu sagen, dass ich mit c++ noch nicht lange mich beschäftige, aber ein bisschen was geht schon ;) mein problem:

ich möchte mit gleichen variablen arbeiten, die aber je nach (ich nenns mal funktion) einen unterschiedlichen wert haben. als beispiel:

funktion1()
{a=1,b=2,c=3}

funktion2()
{a=4,b=5,c=6}

funktion3()
{a=7,b=8,c=9}

und nun möchte ich, zB per zufall, eine funktion wählen lassen und mit den a,b und c - werten der funktion jeweils arbeiten. da das ja lokale variablen sind, kann ich nicht auf sie ausserhalb der funktion zugreifen, aber kann ich die variablen nicht irgendwie übergeben?! hoffe ihr könnt mir helfen :)
 
hi,

warum arbeitest du nicht mit der funktion rand()?

mit jener kannst du dir eine zufallszahl generieren lassen. ich weiß nicht ob es dir jetzt im kompletten programmzusammenhang weiter hilft, habe es einfach mal vermutet.

mfg

EDIT:

ansonsten musst du mit pointer arbeiten.

deklariere in deiner hauptfunktion die 3 variablen, übergebe sie der unterfunktion mit funktion1(&a, &b, &c) und beschreibe sie in der unterfunktion mit *a = 1, *b = 2, *c = 3. (oder so, bin auch noch nicht soo lange am programmieren, aber ich meine das geht)
 
Zuletzt bearbeitet:
Es gibt verschiedene Varianten...

Du könntest globale Variablen deklarieren (unschön).

Du könntest einen struct definieren, welcher die Variablen a, b und c aufnimmt... deine Funktion liefert dann einen struct zurück mit den drei Variablenwerten.

Du könntest auch der Funktion drei Referenz-Parameter auf die Variablen a, b und c, welche in dem Kontext, von dem aus die Funktion aufgerufen wird, deklariert sind...
also z.B.
Code:
void dosomething()
{
  int a, b, c
  func3(&a, &b, &c);
  // ...
}
Ich weiß allerdings nicht, ob ich nun das richtige Zeichen für einen Referenz-Parameter verwendet habe...
Edit: Beispiel auch hier... http://ladedu.com/cpp/src_html/uebref
besser als mein Beispiel, wurde durch andere Sprachen korrumpiert...
Edit2: hier wird Übergabe via Referenz auch noch erläutert, die Seite selbst ist verbuggt man kommt anders nicht so leicht darauf:
http://ladedu.com/cpp/kapitel4_uebergabe_per_referenz

natürlich gibt es bestimmt noch mehr Varianten..
 
Zuletzt bearbeitet:
hallo ihr beiden, danke für die antworten :) den befehl rand() usw. werde ich dann natürlich verwenden, wenns soweit ist, dass es mit den funktionen so funktioniert, wie es soll. aber ich glaube das stichwort "referenzen" ist wohl des lösungs weg. damit werde ich mich dann wohl mal weiter beschäftigen. es soll übrigens ein kleines rpg werden ^^ ich will mit der methode halt verschiedene gegner erstellen, die die selben variablen benutzen (z.B. beim kämpfen) aber halt unterschiedliche werte haben (je nach gegner).
 
Da könntest du dir überlegen, ob du das nicht (teilweise) objektorientiert umsetzst... Gegner würden sich ja ideal als Klassen anbieten...
 
objektorientiert meinst du?! nagut, vielen dank für den tipp, da werde ich mich morgen mal ein bisschen damit beschäftigen. wir hatten das auch schon in der vorlesung, blöderweise hab ich da aber nur mit einen ohr hingehört.
 
hallöchen, ich hab mich jetzt doch dazu entschlossen das mit struct zu lösen und es wird auch so funtionieren, wie ich es will, nur habe ich jetzt ein problem mit struct, will aber nicht extra ein neues thema eröffnen:

ich hab mein struct deklariert und definiert

struct styp {
int ......
char name_geg[25];
}; styp gegner[100];

und beim namen habe ich ein ziemliches problem und finde keine lösung :(( normalerweise müsste man doch das so machen:

gegner[0].name_geg="blabla" und dann irgendwann cout << gegner[0].name_geg, aber natürlich funktioniert es nicht ><

wir hatten schonmal als übung ne liste, wo wir mit struct gearbeitet haben, da hab ich das genauso gemacht nur dass man den namen eingegeben hat und nicht selber definiert hat, deswegen weiß ich also leider nicht wie die genaue syntax ist, um den namen auszugeben. also ums nochmal klar zu beschreiben, ich möchte

gegner[0].name_geg="blabla"
gegner[1].name_geg="blabla2"
gegner[2].name_geg="blabla3" ... usw.

und irgendwann möchte ich den namen ausgegeben haben, z.B. per zufall --> cout<<gegner.name_geg;

:\
 
Hi,

wenn du schon in C++ programmierst wuerde ich dir als Datentyp fuer den Namen einen std::string empfehlen.

In deinem Code weist du einem Array (das ist name_geg) einen anderen Array (das ist "blabla") zu. Das ist zumindest in ISO C++ verboten. Ausserdem muessten die beiden Arrays die gleiche Laenge haben.

Loesung:
Code:
char vecName[25]; //Das ist der Speicherplatz
char* name = "Blabla"; //Name
memcpy(vecName, name, strlen(name)); //Inhalt von name nach vecName kopieren
std::cout << vecName << std::endl; //Ausgeben
Wichtig hierbei ist, dass man auf name nur lesend zugreifen kann, deshalb auch das kopieren! Nachteil ist, dass der Name max. 24 (!!!) Zeichen haben darf. Das 25te Zeichen muss immer '\0' sein (damit wird der "String" terminiert)

So und das Ganze jetzt mit C++ strings:
Code:
//Includes
#include <string>
#include <iostream>

std::string strName;
strName = "Blabla";
std::cout << strName << std::endl;
 
Zurück
Top