Problem mit einer for-Schleife



  • Hallo!
    Als Übungsaufgabe habe ich mir eine Klasse Konto erstellt, wo ich mir am Ende aller Eingaben einen Kontoauszug mit Zeilennummer, abgehobener bzw. eingezahlter Betrag und aktueller Saldo ausdrucke.

    Soweit so gut. Der Ausdruck der Daten passiert in einer for-Schleife, welche bis sizeof() durchlaufen wird.

    void Konto::kontoauszug_drucken()
    {
    	cout << endl << "Kontoauszug" << endl;
    
    	for (int i=0; i < (sizeof(buchungszeile)); i++) 
    	{
    		cout << buchungszeile[i] << "\t";
    		cout << k_betrag[i] << "\t";
    		cout << saldo[i] << "\t" << endl;
    	}
    }
    

    Nachdem die letzte Iteration durchlaufen wurde ( i=4, (sizeof(buchungszeile)) = 4 ) springt das Programm nochmals in die for-Schleife obwohl 4<4 ja nicht true ist und chrashed!

    Ich versteh's nicht! Was mach ich falsch?



  • Zeig mal noch deine Arrays. ( buchungszeile und co. ).



  • Länge eines Arrays ist sizeof(array)/sizeof(elementtype).



  • hier die Deklaration der Klasse:

    class Konto
    {
    public:
    	void set_kontostand(double betrag);
    	void betrag_einzahlen(double betrag);
    	double get_kontostand();
    	const double betrag_abheben(const double betrag);
    	void kontoauszug_drucken();
    	Konto();
    	~Konto();
    
    private:
    	vector<double>	kontoauszug{};
    	vector<int>		buchungszeile{};
    	vector<double>	k_betrag{};
    	vector<double>	saldo{};
    	double kontostand;
    	int zeilennummer;
    	void increment_buchungszeile();
    };
    


  • ich hab's schon

    for (int i=0; i < buchungszeile.size(); i++)


  • Mod

    Genau. Sei vorsichtig mit Verwechselungen von C und C++! Das sizeof ist für C-Arrays (und dort muss man noch mitrechnen, wie @Jockelx erklärt hat). Die gibt es prinzipiell zwar auch in C++, aber das sizeof geht nicht auf den C++-Containern, die du benutzen solltest, und die selber (korrekt und ohne Rechnen) ihre Größe kennen.

    Ansonsten: Zahl mal einen Euro ein und heb' dann zehnmal nacheinander 10 Cent ab!


Log in to reply