Funktion [return Wert]



  • Ich bitte euch, meine Dummheit/Unwissenheit zu verzeihen 😞

    Ich weiß nicht, welchen return Wert ich in meiner Funktion benutzen soll, damit die Ausgabe im Menu klappt 😕 (Das eine 0 als return Wert nicht klappt, war mir auch schon vorher klar)

    Aktuell kommt folgender Wert bei einer 2 in der Funktion raus : "00DB1410"
    Die Werte variieren sich nach jedem Neustart.

    #include <iostream>
    
    using std::cout;
    using std::cin;
    using std::endl;
    
    int Spielfeld(int Y, int X) {
    	for (Y = 0; Y < 5; Y++) {
    		for (X = 0; X < 5; X++) {
    			cout << "2";
    		}
    		cout << endl;
    	}
    	return 0;
    }
    
    int main(int argc, char** argv[])
    {
    	bool Beenden = true;
    	int Eingabe;
    	do {
    		cout << "1 - Spielfeld anzeigen " << endl;
    		cout << "2 - Feld besetzen " << endl;
    		cout << "3 - Felddaten anzeigen " << endl;
    		cout << "4 - Spielfeld loeschen " << endl;
    		cout << "5 - Programm beenden " << endl;
    		cout << "Geben sie ihre Auswahl ein : ";
    		cin >> Eingabe;
    
    	switch (Eingabe) {
    
    	case 1: cout << Spielfeld << endl; break;
    
    	case 2: cout << "Test 1" << endl; break;
    
    	case 3: cout << "Test 2" << endl;  break;
    
    	case 4: cout << "Test 3" << endl; break;
    
    	case 5: cout << "Das Programm wird beendet" << endl; Beenden = false; break;
    
    	default: cout << "Error" << endl;
    
    		}
    	} while (Beenden);
    }
    


  • ReinesWeed schrieb:

    Ich weiß nicht, welchen return Wert ich in meiner Funktion benutzen soll, damit es klappt

    Was ist "es"?



  • daddy_felix schrieb:

    ReinesWeed schrieb:

    Ich weiß nicht, welchen return Wert ich in meiner Funktion benutzen soll, damit es klappt

    Was ist "es"?

    Das "Spielfeld". Wenn ich es ohne eine Funktion mache würde, würde die Ausgabe ohne Probleme funktionieren.

    Es sollte nämlich im Normalfall, wenn man im Menu die "1" drückt, so aussehen :

    22222
    22222
    22222
    22222
    22222

    Ich bekomme allerdings nur das hier ausgegeben : 00DB1410



  • Das, was dir ausgegeben wird, ist die Adresse der Funktion. Was du willst, ist, dass die Funktion aufgerufen wird. Wo kommen eigentlich X uns Y her?



  • case 1: cout << Spielfeld << endl; break;
    

    Gibt die Adresse der Funktion Spielfeld aus. Vermutlich wolltest du die Funktion aufrufen.



  • Du musst die Funktion Spielfeld() aufrufen. So ist es richtig:

    case 1: cout << Spielfeld() << endl; break;
    

    Und die Argumente X und Y sind überflüssig. Nimm stattdessen lokale Variablen in der Funktion:

    int Spielfeld ()
    {
    int X;
    int Y;
    ....
    }
    


  • Printe schrieb:

    Du musst die Funktion Spielfeld() aufrufen. So ist es richtig:

    case 1: cout << Spielfeld() << endl; break;
    

    Hm

    int Spielfeld(int Y, int X)
    


  • case 1: cout << Spielfeld << endl; break;
    

    Was soll hier Spielfeld sein?
    Willst du hier deine Funktion aufrufen?

    Aktuell gibt es dir hier dir die Adresse der Funktion aus.

    Deine Funktion musst du Aufrufen mit parameter also so z.B. Spielfeld(5,5)
    das hat übrigens nichts mit dem returnwert zu tun. Den kannst du auch auf void setzen.



  • @manni: Ja, fiel mir auch gerade auf. Tatsächlich braucht die Funktion die Argumente aber gar nicht.



  • daddy_felix schrieb:

    Das, was dir ausgegeben wird, ist die Adresse der Funktion. Was du willst, ist, dass die Funktion aufgerufen wird. Wo kommen eigentlich X uns Y her?

    Ich danke dir, dass du mir geholfen hast! 🙂



  • Tatsächlich braucht die Funktion die Argumente aber gar nicht.

    stimmt werden beide sowieso wieder auf 0 gesetzt.

    for (Y = 0; Y < 5; Y++) {
            for (X = 0; X < 5; X++)
    

    😃



  • @ReinesWeed: Deine Fehler zeigen, dass dir die grundlegendsten Grundlagen fehlen. Am besten nimmst du dir ein C++-Buch und arbeitest die ersten Kapitel systematisch durch, bevor du anfängst, dir selber Aufgaben und schlechte Lösungen auszudenken.



  • Hi,

    ich treib mal noch ne Sau durchs Dorf:

    void Spielfeld(void){
        for (int Y = 0; Y < 5; Y++) {
            for (int X = 0; X < 5; X++) {
                cout << "2";
            }
            cout << endl;
        }
    }
    

    Gruß Mümmel



  • Wenn du jetzt noch das Deppen-void wegmachst schaut's fast wie C++ aus 😃



  • Hi Hustbaer,

    hustbaer schrieb:

    Wenn du jetzt noch das Deppen-void wegmachst schaut's fast wie C++ aus 😃

    Ich muss ja noch ein bisschen Entwicklungpotential offen lassen, damit auch leute wie Du noch was beitragen können 😃
    Drum hab ich ja auch gesagt "ich treib mal noch ne Sau durchs Dorf: " und nicht ich liefere das perfekte Endergebnis. 😉

    Gruß Mümmel



  • void Spielfeld()
    {
    for (int y = 0; y < 5; y++)
    {
    for (int x = 0; x < 5; x++)
    {
    cout << "2";
    }
    cout << endl;
    }
    }

    also noch mehr Verbesserungspotential.
    - Variablen klein schreiben.
    - Methode (Spielfeld) klein oder groß, da gibt es verschiedene Ansichten.

    - Aber die beginnende geschweifte Klammer egal bei was (for, if, namespace, class, usw.) gehört in eine eigene Zeile so wie die schliessende auch. Lass dir von niemand anderem was anderes einreden. Alle die was anderes behaupten wissen einfach nicht was leserlicher Code bedeutet. *duck und weg* 😃



  • eigentor 🙂

    void Spielfeld()
    {
        for (int y = 0; y < 5; y++)
        {
            for (int x = 0; x < 5; x++)
            {
                cout << "2";
            }
            cout << endl;
        }
    }
    


  • Zwei Helden ... und der Deppen-Pseudo-String und das Deppen-endl sind immer noch da. 🤡



  • Hi Swordfish,

    Swordfish schrieb:

    Zwei Helden ... und der Deppen-Pseudo-String und das Deppen-endl sind immer noch da. 🤡

    Ja, jeder soll ein Stück vom Kuchen abbekommen. 😉
    Also schneid Dir Dein Stück ab und schreib die nächste Evolutionsstufe.

    Gruß Mümmel



  • optimizer schrieb:

    - Aber die beginnende geschweifte Klammer egal bei was (for, if, namespace, class, usw.) gehört in eine eigene Zeile so wie die schliessende auch. [...]

    Da das immer wieder Stoff für sinnlose Diskussionen ist, curly brackets am besten vermeiden wo möglich:

    #include <iostream>
    
    auto Spielfeld = []()
    {
    	char O[] = "\036\062\006";
    	while (std::cout.put(
    		+             ((1 << 0) & 1)    [O]
    		-  (--(*O) %  ((1 << 1) | 0)    [O]
    		?             ((1 << 1) | 1)    [O]
    		:             ((1 << 0) & 1)    [O]
    		-  '\n')),
    		*                                O
    	);
    };
    

    //edit: Operatoren zur besseren Lesbarkeit vorangestellt.


Log in to reply