Was hab ich hier falsch gemacht(Bool wert tritt nicht ein)?



  • Hallo!
    ich habe im Rahmen eines Lehrbuches ein Übungsprogramm geschrieben, dass Speicherlöcher produziert(indem es die dynamischen Variablen nicht mit delete frei gibt). Jetzt hätte ich es gern so, dass ich mich das Programm nach einigen Abläufen fragt, ob ich es terminieren möchte, damit ich das ganze auch abbrechen kann. Nur aus irgendwelchen Gründen wird gilt für die bool variable niemals = true; Selbst wenn ich hinter die konditionelle Initialisierung noch eine direkte Initialisierung mit stop = true angebe.
    Wo liegt hier mein Programm-/Denkfehler?

    // Uebungsaufgabe Dynamische Variablen(2): Programm zur Produktion von Speicherlöchern(memory leaks)
    
    #include <iostream>
    
    void fillmemory();
    
    void main() {
    
    bool stop=false;
    char eingabe;
    
    while(stop == false) {
    for(int i = 0; i < 10000; i++) {
    fillmemory();
    
    do {
    cout << "Beenden(j/n)?\t";
    cin >> eingabe;
    } while(eingabe != 'j' && eingabe != 'n');
    if(eingabe == 'j') stop = true;
    // stop = true ... das funktioniert an dieser stelle auch nicht.
    }
    }
    
    }
    
    void fillmemory() {
    
    double *zahl = new double[100000];
    
    }
    


  • Der Fehler liegt darin, dass du, wenn j eingegeben wird, die for-Schleife nicht abbrichst. Die wird auf jeden Fall 10000 mal ausgeführt, bevor die Bedingung der while-Schleife wieder geprüft wird. Du könntest die for-Schleife mit break verlassen oder stop in die Bedingung der for-Schleife einbeziehen.

    Ich hoffe übrigens, dass die Einrückung irgendwie verlorengegangen ist. Oder schreibst du wirklich so deinen Code?



  • Hallo,

    Zwischen der Initialsierung von stop, un deren Verwendung erfolgt keine weitere Eingabe. Wie wärs, wenn du stop mit false initalisierst.
    [edit]Vergiss das[edit]
    Im Übrigen würde

    while(!stop)
    

    reichen



  • bool stop=false;
    char eingabe;
    
    for(int i = 0; !stop && i < 10000; i++) {
      fillmemory();
    
      do {
        cout << "Beenden(j/n)?\t";
        cin >> eingabe;
      } while(eingabe != 'j' && eingabe != 'n');
    
      stop = (eingabe == 'j');
    }
    

    so funktionierts es (habe es aber nicht getestet).

    Tommi



  • bool stop=false;
    char eingabe;
    
    for(int i = 0; !stop && i < 10000; i++) {
      fillmemory();
    
      do {
        cout << "Beenden(j/n)?\t";
        cin >> eingabe;
      } while(eingabe != 'j' && eingabe != 'n');
    
      stop = (eingabe == 'j');
    }
    

    so funktionierts es (habe es aber nicht getestet).

    Tommi



  • Vielen Dank, jetzt funktioniert es!
    Ich glaub ich werd mal vom texteditor wechseln, da hat man kaum übersicht...


Anmelden zum Antworten