richtige Datenübergabe?



  • Vielleicht solltest du dir nochmal ein Tutorial oder ein Buch durchlesen. Das gehört zu den Grundlagen.

    Du musst den Rückgabewert einer Variablen zuweisen:

    #include <iostream>
    
    int add() {
      int wert = 0;
      // mach was mit wert
      return wert;
    }
    
    int main() {
      int bla = add();
      std::cout << bla;
    }
    


  • danke für den tipp,

    bin ja noch am lernen. hab seit 2 wochen nen Buch. Habe das Motto: learning by doing! 🙂

    Bis dann!



  • timkon schrieb:

    Habe das Motto: learning by doing! 🙂

    Liest erst und programmier dann nach. 😉
    Ansonsten ist das Motto gut. 🙂



  • Das Problem ist jetzt nur, wenn ich

    [cpp]
    //Fukntion die Aufgaben des Users zählt
    void Zaehler(SINT wahl) {
    	SINT anzahl; //Variable die, die Menge der Aufgaben angibt
    	cout << "Wie viele Aufgaben moechtest du rechnen? ";
    	cin >> anzahl;
    	//Variable a gibt die Aufgaben die User rechnen will an
    	for(int a = 0; a <= anzahl; a++) {
    		if(a < anzahl && wahl == 1) { 
    			SINT richtig = Add();
    		}
    		else if(a < anzahl && wahl == 2) {
    
    		}
    		else if(a < anzahl && wahl == 3) {
    
    		}
    		else if(a == anzahl) {
    			//Hier wird eine Zusammenfassung ausgegeben mit anschließender Frage
    			cout << "Du hast von " << anzahl << " Aufgaben " << richtige << " richtig beantwortet.\n";
    			SINT weiter;
    			cout << "\nNeu Aufgaben [1] - Ende [2]\n";
    			cout << "\nDeine Auswahl: ";
    			cin >> weiter;
    			if(weiter == 1) {
    				system("cls");
    			}
    			else if(weiter == 2) {
    				exit(0);
    			}
    		}
    	}
    }
    [/cpp]
    

    schreibe, muss ich das in der if-Anweisung machen. Da ich von dort Add aufrufe. Jetzt habe ich richtige in der If-Anweisung un der for-Schleife zur Verfügung, aber nicht außerhalb dieser. Ich möchte richtige aber erst ausgeben, wenn if und for abgearbeitet sind.
    Außerhalb von if und for scheint richtig, dann nicht mehr vorhanden, weil er dann entweder gar nicht zählt oder nur falsch.

    Es kommt dann der Fehler: error C2065: 'richtige' : undeclared identifier
    ???



  • Dann musst du "richtige" ein wenig globaler machen. In deinem Fall würde es reichen "richtige" vor dem if-Block, aber im for-Block zu deklarieren:

    int main() {
      for(int i=0; i<...; ++i) {
         int richtige = 0;
         if(...) {
            richtige = add();
         }
      }
    }
    

    Außerdem sehe ich das du "richtig" statt "richtige" geschrieben hast (nur so als Hinweis).



  • Irgendwas läuft glaub ich grad falsch. 🙂

    Hier ist Zaehler(), die Funktion ruft in for und if Add() auf.

    [cpp]
    //Fukntion die Aufgaben des Users zählt
    void Zaehler(SINT wahl) {
    	SINT anzahl; //Variable die, die Menge der Aufgaben angibt
    	cout << "Wie viele Aufgaben moechtest du rechnen? ";
    	cin >> anzahl;
    	//Variable a gibt die Aufgaben die User rechnen will an
    	for(int a = 0; a <= anzahl; a++) {
    		if(a < anzahl && wahl == 1) {
    			SINT richtige = Add();	//[b]Hier ist dann richtige aus Add()[/b]
    		}
    		//....
    		else {
    			//Hier wird eine Zusammenfassung ausgegeben mit anschließender Frage
    			cout << "Du hast von " << anzahl << " Aufgaben " << richtige << " richtig beantwortet.\n";
    			SINT weiter;
    			cout << "\nNeu Aufgaben [1] - Ende [2]\n";
    			cout << "\nDeine Auswahl: ";
    			cin >> weiter;
    			if(weiter == 1) {
    				system("cls");
    			}
    			else if(weiter == 2) {
    				exit(0);
    			}
    		}
    	}
    }
    [/cpp]
    

    Add() sieht bei mir jetzt so aus:

    [cpp]
    SINT Add() {
    	SINT richtige = 0; //Variable die die richtigen Ergebnisse zählt
    	unsigned int x,y; //Variablen der Zahlen für Aufgaben
    	Zahlen(x,y);      //die Aufgabenzahlen werden geholt
    	SINT ergebnis; //Eingabevariable des Ergebnis vom User
    	cout << "\n" << x << " + " << y << " = ";
    	cin >> ergebnis;
    	SINT z = x+y; //Richtiges Ergebnis z wird ab Test() übergeben
    	//Funktion Test wird aufgerufen und testet das Ergebnis
    	if(Test(z,ergebnis) == true) {
    		richtige++; 
    	}
    	return richtige;
    }
    [/cpp]
    

    Es funktioniert schon alles richtig mit der Datenübergabe, aber ich habe die Variable richtige dann am falschen Ort. Nämlich hier (Ausschnit aus Zaehler):

    [cpp]
    //...
    for(int a = 0; a <= anzahl; a++) {
            if(a < anzahl && wahl == 1) {
                SINT richtige = Add();    //Hier ist dann richtige aus Add()
            } 
    //...
    [/cpp]
    

    Bräuchte sie aber hier, außerhalb von for und if, bräuchte sie ind er ganzen Funktoin Zaehler.

    [cpp]
    //...
    else {
    			//Hier wird eine Zusammenfassung ausgegeben mit anschließender Frage
    			cout << "Du hast von " << anzahl << " Aufgaben " << richtige << " richtig beantwortet.\n";
    //...
    [/cpp]
    

    Bin ich zu blöd dazu oder was is los? 🙂 Schwere Sache :)!

    Danke für Hilfe!



  • Das else ist doch noch im for-Block. Wo ist da das Problem? Mach es so wie ich es geschrieben habe. Und wenn richtige auch außerhalb des for-Blocks benötigt wird, dann deklarier es auch vor dem for-Block:

    int main() {
      int richtige = 0;
      for(int i=0; i<...; ++i) {
         if(...) {
            richtige = add();
         }
      }
      std::cout <<  richtige;
    }
    

    Wie gesagt, du solltest erstmal in deinem Buch bis zu der entsptrechenden Stelle lesen, dann würden sicher auch weniger Probleme auftreten. Die meisten Bücher zeigen in welchen Gültigkeitsbereichen eine Variable zugreifbar ist und wann nicht.



  • Ok is ja gut :), also es funktioniert jetzt... fast. 🙄

    Aber ich habe festgestellt, dass richtige immer 1 bleibt.

    Ich rufe Add() auf, das Ergebnis aus Add() wird an eine Funktion Test übergeben, die dann true oder false zurück liefert.

    So, jetzt hat Test true geliefert, also ist richtige = 1. Ist ja auch korrekt. Dann beginnt das Spiel innerhalb der Vorschleife, von vorne zB. 3 mal. Da die Funktion Test dann wieder true liefert (bei richtigem Ergebnis) ist richtige dann wieder 1. Es erhöht sich nicht, habe ich das richtig erklärt/vertanden?

    Kann man das irgendwie ändern?

    [cpp]
    void Mul() {
    	int richtige = 0; //Variable die die richtigen Ergebnisse zählt 
    	//...
    	//Schleife for wird so oft durchlaufen wie der User vorgibt
    	for(int i = 0; i <= anzahl; i++) {
    		if(i < anzahl) {
    			//...
    			if(Test(z,ergebnis) == true) //Funktion Test wird aufgerufen
                    richtige++; 
    		}
    		else if(i == anzahl) {
    			cout << "Du hast von " << anzahl << " Aufgaben " << richtige << " richtig beantwortet.\n";
    
    		}
    	}
    } 
    
    [/cpp]
    

    Hier wird es zB erhöht, da die Funktion nicht verlassen wird.
    Danke!



  • Dann musst du richtige in der Funktion statisch machen oder du machst die Variable global oder du übergibst die Variable jedes mal neu. Du initialisierst sie immer mit 0, wenn du sie dann erhöhst ist sie auch immer 1.

    Du könntest aus Add() sowas machen:

    int Add(int richtige) {
      if(...) ++richtige;
    
      return richtige;
    }
    
    int main() {
      int richtige = 0;
      richtige = Add(richtige); // Wenn if true ergibt ist richtige jetzt 1
      richtige = Add(richtige); // Wenn if nochmal true ergibt ist richtige jetzt 2
    }
    


  • Supi, besten Dank! Jetzt bin ich zufrieden und hab wieder ne Menge gelernt, 🙂 klasse!



  • Oder lies mal was über Pointer und Referenzen.


Anmelden zum Antworten