Kleiner Fehler im meinem Programm. Referenz



  • Kazumi schrieb:

    Wenn ich ein exit mache, brauche ich keinen Wert zurückzugeben, richtig?

    Ja, das ist richtig, aber vermutlich nicht der Sinn der Übung. Schließlich besteht die Aufgabe ja gerade darin, etwas zurückzugeben 😉
    (und bei einem exit() brauchst du dich auch nicht wundern, daß sich das Programm beendet - genau das ist die Aufgabe von exit())

    PS: Und falls du Mittel gegen das automatisch Beenden des Programms suchst, schau mal in die FAQs vom Konsolen-Board.



  • ja, aber in der Aufgabenstellung wird verlangt, wemm i einen ungültigen Wert hat soll das Programm beendet werden.



  • Kazumi schrieb:

    ja, aber in der Aufgabenstellung wird verlangt, wemm i einen ungültigen Wert hat soll das Programm beendet werden.

    Bei einem ungültigen Wert ja - bei einem gültigen Wert soll die Funktion normal zurückkehren (da ist exit() die falsche Lösung).



  • aso, okay

    ich glaube so müsste es sein,

    int &at(int *vec, unsigned len, unsigned i)
    {
    
       int &referenz = vec[i];
    
    	if (i<len-1)
    	{
        cout << "index overflow";
    	exit (0);
    	}
    	else return referenz;
    }
    

    aber ich bekomme es nicht hin, dass das Fenster am Ende stehen bleibt und nicht automatisch schließt.

    Hab auch die ganze FAQs gelesen und ausprobiert, auch mit cin.get(); klappts leider auch nicht

    //1. ist es überhaupt möglich, dass das Programm nicht beendet wird wenn man exit (0); stehen hat?

    //2. Es muss doch i>len-1 sein, oder?
    Weil wenn i=1 ist, soll ja die else funktion ausgeführt werden 😕 ⚠



  • Zu 1: Nein, in dem Moment, wo du exit() aufrufst, wird das Programm beendet, ohne daß du noch weitere Einflußmöglichkeiten hast (allerdings wird eine per atexit() registrierte Funktion noch aufgerufen, das wäre ein möglicher Ansatz).

    Zu 2: Du hast die Funktion doch selber geschrieben, also solltest du auch wissen, wie die korrekte Fehlerbedingung lautet 😉

    Ansonsten: Du hast immer noch die falsche Verarbeitungsreihenfolge. Du solltest ERST prüfen, ob der Index in Ordnung ist und DANACH die Referenz aus dem Array ziehen.

    PS: Und "else" ist keine Funktion 😉



  • aber sobald ich erst den Index prüfe und dann die referenz,
    dann erscheint immer ein Fehler "'referenz': nichtdeklarierter Bezeichner"

    int &at(int *vec, unsigned len, unsigned i)
    {
    
    	if (i> len-1)
    	{
        cout << "index overflow";
        cin.get();
    	cin.get();
    	}
    
    	else 
    
    		int &referenz = vec[i];
    		return referenz;
    
    }
    


  • Vegleiche mal dein if mit dem else, was fällt dir auf?



  • Wenn du an eine if- oder else-Anweisung mehrere Befehle anhängen willst, benötigst du auch geschweifte Klammern, um sie zusammenzufassen. In der letzten Version gehört (entgegen dem was die Einrückung sagt) nur die Definition von "referenz" zum else-Zweig.



  • CStoll schrieb:

    Wenn du an eine if- oder else-Anweisung mehrere Befehle anhängen willst, benötigst du auch geschweifte Klammern, um sie zusammenzufassen. In der letzten Version gehört (entgegen dem was die Einrückung sagt) nur die Definition von "referenz" zum else-Zweig.

    wow, danke.
    Auf die Klammer wäre ich jetzt nicht von alleine gekommen 🙂

    Das ist aber bei C++ im vergleich zu C neu, oder?

    Kann mir nicht wirklich daran erinnern, es so gemacht zu haben, ist aber auch schon mehrere Wochen her als ich noch C programmierte.



  • das war schon immer so und ist in allen (?) Sprachen, die geschweifte Klammern haben gleich.

    greetz KN4CK3R



  • Kazumi schrieb:

    CStoll schrieb:

    Wenn du an eine if- oder else-Anweisung mehrere Befehle anhängen willst, benötigst du auch geschweifte Klammern, um sie zusammenzufassen. In der letzten Version gehört (entgegen dem was die Einrückung sagt) nur die Definition von "referenz" zum else-Zweig.

    wow, danke.
    Auf die Klammer wäre ich jetzt nicht von alleine gekommen 🙂

    Das ist aber bei C++ im vergleich zu C neu, oder?

    Kann mir nicht wirklich daran erinnern, es so gemacht zu haben, ist aber auch schon mehrere Wochen her als ich noch C programmierte.

    Ist doch 'n Witz ?
    Das gehört zum Basiswissen.
    Wenn du da nicht selbst drauf gekommen wärst, hättest du echt noch Probleme gehabt (nicht nur hier).

    Außerdem, mehrere Wochen sind nicht mehrere Monate. Das ist keine Entschuldigung. Und wenn du auch in C nichts derartiges gemacht hast, ...


Anmelden zum Antworten