Daten übergeben??



  • Hi,

    habe folgendes kleines Problemchen. Ich rufe aus meiner int main() die Methode Zahlen() auf. Sie liefert als return a,b zurück

    //Methode zum Zahlen erzeugen
    unsigned short int Zahlen() {
    	unsigned short int b = 5;
    	unsigned short int a = 5;
    	return a;
    }
    

    Die Methode soll später bei jedem Aufruf Zufallszahlen erzeugen.

    **Eigentlich müsste ich doch jetzt in der int main() die Variablen a,b zu verfügung haben oder?

    Oder wie muss ich das anstellen?**

    Aufjeden Fall möchte ich a und b dann an eine Methode Add() übergeben, die mit den Zahlen arbeitet und ein Ergebnis zurück liefert. Zur Übergabe schreibe ich dann doch Add(a,b) oder?

    Hier die Methode Add()

    unsigned short int Add(unsigned short int a, unsigned short int b) {
    	std::cout << "\nBefinde mich in Add()\n";
    	std::cout << "a=" << a << " b=" << b <<"\n";
    	return (a+b);
    }
    

    Add() liefert das Ergebnis von a und b zurück, also kann ich es ja dann in der Main Methode mit cout ausgeben. Das funktioniert ja auch alles schon, aber nur, wenn ich a und b in int main() erstelle.

    Danke für eure Hilfe!



  • Die Variablen die in einer Funktion erzeugt werden und NICHT STATISCH sind, sind lokale Variablen und werden beim Verlassen der Funktion automatisch zerstört. Desswegen heißen sie auch "automatische Variablen".



  • Danke für die schnelle Hilfe!

    das heißt ich müsste dann, da ich ja jedesmal neue Zahlen möchte, direkt in meiner Add() Zahlen erzeugen?
    Da ich das aber später auf 3 weitere Methoden anwenden will wäre das ja ziemlich viel schreibaufwand, kann man das anders lösen? ZB so, dass die Variablen nicht zerstört werden?
    Weil wenn ich sie in der int main() erzeuge, dann habe ich ja immer nur die selben, wäre ja blödsinn!



  • Hi,

    timkon schrieb:

    Eigentlich müsste ich doch jetzt in der int main() die Variablen a,b zu verfügung haben oder?

    Nein, da du die Variablen funktionlokal definierst! Sie gelten also NUR in deiner Funktion zahlen().

    😮

    Sie liefert als return a,b zurück

    1. Tut sie das nicht und
    2. kann sie/man das nicht

    Oder wie muss ich das anstellen?

    So z.B.:

    #include <iostream>
    #include <ctime>
    using namespace std;
    
    inline void CreateRandomNumbers(unsigned int& uiA, unsigned int& uiB)
    {
        srand(time(NULL));
        uiA = rand();
        uiB = rand();
    }
    
    int main()
    {
        unsigned int uiA, uiB;
        CreateRandomNumbers(uiA, uiB);
    
        cout << "1. Zufallszahl: " << uiA << endl;
        cout << "2. Zufallszahl: " << uiB << endl;
    
        return (0);
    }
    

    PS: Also bisher ist das ne Funktion und keine Methode :p

    Edit_1: inline ist schon recht sinnvoll 😉
    Edit_2: n bissl zu spät^^



  • Wenn du in der Funktion eine Variable als "static" deklarierst dann wird sie nicht zerstört das hilft dir aber nichts weil die Variable bloß innerhalb der Funktion gültigkeit hat. Also in funktion main() ist sie nicht bekannt. Ich würde das einfach so lösen:

    int main(){

    Add(rand(),rand() );
    return 0;
    }

    Hier werden deiner Fuktion einfach jedesmal zwei Zufallszahlen übergeben.

    oder für den Fall, dass du auf deiner Funktion "Zahlen()" beharren möchtest:

    int Zahlen(){
    return rand();
    }
    <----------- ist allerdings schwachsinn



  • hey, danke wie leicht manches doch geht! Kann man in die Klammern auch schreiben in welchem Bereich die Zaheln erzeugt werden? Also zB rand(20),rand(20)

    Danke für deine Hilfe!



  • timkon schrieb:

    Das funktioniert ja auch alles schon, aber nur, wenn ich a und b in int main() erstelle.

    das liegt daran, das die Var. lokalen Gültigkeitsbreich besitzen...!!!

    Ein Beispiel (Pseudocode):

    char szBuffer[100];
    FuncIrgWas()
    {
       int daaaa;
    }
    
    FuncNochWas()
    {
       static int laaber;
    }
    
    int main()
    {
       => hier ist NUR szBuffer bekannt!
    }
    


  • timkon schrieb:

    Kann man in die Klammern auch schreiben in welchem Bereich die Zaheln erzeugt werden? Also zB rand(20),rand(20)

    hmm ist doch irg-wie offensichtlich 😮 , dass es so NICHT geht oder?

    siehe Prototyp der Funktion rand():

    _CRTIMP int    __cdecl rand(void);
    

    Aber machbar ist das nat. schon, nämlich so:

    int iRandNum = rand() % 20 + 1; // erzeugt ne Zufallszahl zwischen 1 und 20
    

    Hoffe ich konnte helfen 😉



  • hm... interessante Methode 🙂 Darauf muss man erst einmal kommen.



  • klingt schon mal gut, aber wie kann ich dass in die Funktion einbauen?



  • Benutze doch einfach die Funtion "CreateRandomNumbers" von CodeFinder und ändere einfach uiA = rand();
    uiB = rand();
    in uiA = rand()"dein bereich";
    uiB = rand()"dein bereich";
    ab.


Anmelden zum Antworten