Code bleibt auf der sleben Stelle stehen.



  • String koodsys()
    {
     int ssnummer=0;
     int pnummer=0;
     int zaehler=0;
     String strssnummer;
     String strpnummer;
    //-----------------------
     if(zaehler==0)
     {
      ssnummer=ssnummer++;
      pnummer=1;
      zaehler=zaehler+6;
     }
     else
     {
       zaehler=zaehler-1;
       pnummer=pnummer++;
     }
      strpnummer=IntToStr(pnummer);
      strssnummer=IntToStr(ssnummer);
      return strssnummer+":"+strpnummer;
    };
    

    Dieser Code soll eigentlich am Ende mir immer wieder eine neue Zahl ausgeben. Nur bleibt er immer bei 1:1 . Benutze Borland C++ Builder. Hoffe auf antworten. Wenn fragen einfach Stellen. ^^



  • Hallo

    wie kommst du darauf, das du bei absolut identischen Ausgangswerten ein anderes Rückgabeergebnis herausbekommst? Inwiefern willst du denn eine Änderung der Rückgabe?

    bis bald
    akari



  • Habe ich mir auch schon gedacht und habe die Zeilen

    int ssnummer=0;
     int pnummer=0;
     int zaehler=0;
    

    in

    int ssnummer;
     int pnummer;
     int zaehler;
    

    geändert. Allerdings kammen dann konfuse Zahlen bei raus. Ich möchte das das da immerwieder einer draufgezählt wird wenn die funktion aufgerufen wird.



  • Hallo

    da du jetzt die Integer-Zahlen nicht initialisierst, stehen da noch mehr oder weniger zufällige Zahlen in den Variablen. Auch keine Lösung.

    Du must dir schon die Zahlen, mit denen du den String generierst, schon auch außerhalb der Funktion merken und der Funktion übergeben. Alternativ kannst du auch den entstanden String beim nächsten Aufruf der Funktion als Parameter übergeben, und so aus diesem die letzten Zahlen extrahieren.

    bis bald
    akari



  • Hallo Mor,

    ich glaube, Du übersiehst, dass Du die Werte von ssnummer, pnummer, zaehler bei jedem Aufruf zurücksetzt; der Code "weiß" ja gar nicht, dass er schon einmal aufgerufen wurde.

    Eine mögliche Lösung wäre, das als Klasse zu schreiben und diese Variablen in der Klasse zu platzieren, nicht in der Funktion. Im Konstruktor der Klasse initialisierst Du sie dann so, wie Du's bisher gemacht hast, und in der Funktion lässt Du diese Initialisierung weg. Dann bleiben die Werte nämlich zwischen den Aufrufen erhalten.

    HTH, Gerry



  • kannst du mir das extrahieren erklären oder das mit der Klasse? 🙂



  • Hallo

    siehe die AnsiString-Methoden, insbesondere Pos und SubString.

    bis bald
    akari



  • Oder die einfachste Lösung - du deklarierst deine Variablen als "static", dann werden sie nur beim ersten Aufruf initialisiert und behalten zwischen zwei Aufrufen den alten Wert bei.


Anmelden zum Antworten