Problem mit for-Schleife



  • Hi, ich bin hier ganz neu und lerne gerade erst c++ und heir mein problem:

    #include <iostream>
    using namespace std;
    int main ()
    //

    {
    int Autos = 0;
    int Reparaturpunkte = 200;
    int RundenReparaturpunkte = 0;
    int ProAuto = 0;

    cout << "Wieviele Autos sollen pro Runde repariert werden? : " << endl;
    cin >> Autos;

    for (int i=0;i<Reparaturpunkte;i++)
    {
    cout << " Es werden " << i+Autos << "Autos repariert" << endl;
    cout << "Wieviele Reparaturpunkte pro Auto? : " << endl;
    cin >> ProAuto;

    ProAuto*Autos == RundenReparaturpunkte;

    cout <<" Es werden " << RundenReparaturpunkte << " Punkte Verbraucht" << endl;
    Reparaturpunkte -= RundenReparaturpunkte;
    }
    cout <<" Es sind noch " << Reparaturpunkte << "Reparaturpunkte uebrig" << endl;

    return 0;

    }

    wenn man die vorletzte klammer 2zeilen runter macht, dann läuft die konsole , jedoch nicht richtig. was habe ich falsch gemacht?Wie kann ich in Zukunft diesen fehler vermeiden? Dankeschön 🙂 LG



  • Was möchtest du mit dieser Zeile erreichen?

    ProAuto*Autos == RundenReparaturpunkte;
    

    Nimm beim nächsten mal für deinen Code die Code-Tags.
    Code mit der Maus markieren und auf den C++-Button unter den 😞 :p klicken.
    Benutze auch die Vorschau, um zu sehen wie das aussieht.



  • Hi,
    ich dachte mit dem befehl proauto*auto == Reparatur , sage ich dem compiler, dass die Punkte genau so zu zählen sind wie reparaturpunkte. wie muss ich dass denn sonst schreiben damit diese punkte(Autos*ProAuto) von den reparaturpunkten abgezogen werden, beim reparieren von autos .
    Danke LG



  • Zunächst hast du da eine Multiplikation und einen Vergleich auf Gleichheit.

    Da die Multiplikation einen höheren Rang hat wird diese zuerst ausgeführt und das Ergebniss mit dem Wert rechts vom == verglichen.
    Das Ergebnis von dem Vergleich wird verworfen, da du damit nichts machst.

    Du willst eine Zuweisung haben.

    Links steht die Variable, die den neuen Wert bekommen soll, dann kommt das = und dann der neue Wert. Der kann auch eine Berechnung oder der Rückgabewert einer Funktion sein.

    Blätter mal in deinem Buch/Tutorial ein paar Seiten weiter.



  • danke, das habe ich schon probiert aber dann kommt immer die punktzahl 0 raus und es wird nicht von den gesamtreparaturpunkten abgezogen.
    im buch habe ich schon weitergeschaut, aber leider wars das zu for-schleifen auch schon wieder 😞 zumindest was das nächste kapitel angeht



  • derbärenmann schrieb:

    danke, das habe ich schon probiert aber dann kommt immer die punktzahl 0 raus

    Zeig deinen (ganzen) Code damit.



  • Bei

    ProAuto*Autos == RundenReparaturpunkte;
    

    ist vermutlich

    RundenReparaturpunkte = ProAuto * Autos;
    

    gemeint.



  • Und der Ausdruck steht da einfach in der Luft oder wie?



  • Der steht so in seiner Schleife. 😕



  • das habe ich schon richtig herum hingedreht,aber trotzdem kommt was falsches raus.. ich habe mir das so vorgestellt : In einem Spiel hast du die möglichkjeit dein Auto nur zu reparieren bzw deine Autos wenn du bestimmt viele reparaturpunkte gesammelt hast.
    Das Programm soll nun jede runde nach einer reparatur von autops(welche anzahl man selber angibt) und punkten die für die jeweiligen autos benötigt werden um sie zu reparieren(welche man auch selber angibt) wieder aufs neue anzeigen, wieviele Reparaturpunkte noch uebrig sind und wieviel autos man nun wieder reparieren moechte.
    So hoffe das war verständlich genug. Lg



  • ...



  • derbärenmann schrieb:

    In einem Spiel hast du die möglichkjeit dein Auto nur zu reparieren bzw deine Autos wenn du bestimmt viele reparaturpunkte gesammelt hast.

    N´abend, in deinem Programm hat man also 200 Punkte?

    derbärenmann schrieb:

    Das Programm soll nun jede runde nach einer reparatur von autops(welche anzahl man selber angibt) und punkten die für die jeweiligen autos benötigt werden um sie zu reparieren(welche man auch selber angibt) wieder aufs neue anzeigen, wieviele Reparaturpunkte noch uebrig sind und wieviel autos man nun wieder reparieren moechte.

    Also eine Schleife die so lange läuft, bis man keine Reparationspunkte mehr hat? Dann ist die Verwendung einer for-Schleife aber ungünstig, eher eine while-Schleife.

    Ich habe nach dieser Anleitung dein Programm umgebastelt, allerdings ohne Überprüfung ob die Punkte für die gewünschte Reparatur ausreichen (wenn nicht macht man Schulden;-)

    #include <iostream> 
    using namespace std; 
    int main () 
    // 
    
    { 
    	int Autos = 0; 
    	int Reparaturpunkte = 200; 
    	int RundenReparaturpunkte = 0; 
    	int ProAuto = 0; 
    
    	while (Reparaturpunkte>0) 
    	{ 
    		cout << endl << "Wie viele Autos sollen diese Runde repariert werden? : " << endl; 
    		cin >> Autos;
    
    		cout << " Es werden " << Autos << "Autos repariert" << endl; 
    		cout << "Wie viele Reparaturpunkte pro Auto? : " << endl; 
    		cin >> ProAuto; 
    
    		RundenReparaturpunkte=ProAuto*Autos; //wurde bereits erklärt;-) 
    
    		cout <<" Es werden " << RundenReparaturpunkte << " Punkte Verbraucht" << endl; 
    		Reparaturpunkte -= RundenReparaturpunkte; 
    
    		cout <<" Es sind noch " << Reparaturpunkte << " Reparaturpunkte uebrig" << endl;
    	} 
    
    	return 0; 
    
    }
    

    Wenn das Programm immer noch nicht das tut, was du willst, dann war deine Erklärung für mich immer noch nicht verständlich genug;-)
    MFG John.



  • ...



  • Swordfish schrieb:

    Was sollen denn die ganzen endl s?

    Moin, ich habe nur eins hinzugefügt, OK, das hätte man auch an die letzte Textzeile mit anfügen können (sehe ich jetzt gerade, war ja schon spät;-)
    Aber das Design ist nicht meine Aufgabe, schön ist anders...
    Lg John.



  • ...



  • Hi, willst du gerade eine Diskussion anfangen ob "endl" oder "\n" besser ist? Kurze Antwort: Geschmackssache.
    Und da der Thread-Ersteller ebenfalls diese gewählt hat... (Abgesehen davon nutze ich auch eher endl, da erkennt man eindeutiger den Zeilenumbruch, ist halt wie gesagt Geschmackssache). LG John.



  • ...



  • Swordfish schrieb:

    Es gibt einen wichtigen Unterschied zwischen '\n' und std::endl ...

    Hallo, in der Theorie gibt es den, ist nur die Frage ob dieser in der Praxis tatsächlich einen entscheidenden Unterschied macht?

    Zum einen soll endl langsamer sein, stimmt auch (hatte ich vor Monaten selbst mal getestet, wobei ich da die Zeit messen musste, sonst merkt man keinen Unterschied, oder zumindest habe ich noch nie einen gemerkt...).
    Zum anderem würde ich vermuten, dass endl mehr Leistung frisst, ist dem so?

    Mit meinem Wissensstand gibt es keinen triftigen Grund warum man endl unbedingt vermeiden sollte und nur benutzen sollte, wenn man wirklich den flush will? (der Meinung scheinen auch viele Lehrbücher und Tutorials zu sein)

    Aber ich lass mich gern eines Besseren belehren!
    LG John.



  • Es macht dann einen Unterschied, wenn du massenhaft Daten schreibst, z.B. in Dateien. Dann kann ein std::endl unnötig ausbremsen.

    In der Konsole spielt es keine Rolle, auch wenn es in diesem Forum relativ puristische Meinungen diesbezüglich gibt. Je nach Konsole ist es sogar notwendig, wenn man Ausgaben unmittelbar auf dem Bildschirm haben will. Aber ich würde es dann nur nach einem Block setzen und sicher nicht innerhalb eines Textes, dann schreibt man lieber gleich \n ins Stringliteral.


Log in to reply