Durchlaufstopp nach "cin"

  • Guten Morgen, Leute!

    Als erstes, entschuldigt, wenn ich es in die falsche Ecke gepostet habe, aber c++ sah für mein c++ Problem ganz gut aus :)

    Genau, zum C++ lernen wollte ich für unsere Rollenspielrunde einen Exp-Berechner machen (später auch noch anderes...), gibt es zwar schon, aber egal.
    Hier erstmal der Programmschnipsel mit dem Fehler:

    Das Programm läuft eigentlich ganz gut. Aber wenn er bei dieser Schleife den letzten Durchlauf macht, dann gibt er noch (beispielsweise)

    [#3],[HG]:

    aus, dann kann man was hinschreiben, aber es passiert anschließen nichts mehr, es wird auch nicht der Text danach ausgegeben.

    Das komplette "Programm" hängt mit dran.

    ähhm ja, Danke schonmal für eure Mühen und Antworten :)

    Grüße, Rasensprenger

    Einmal editiert, zuletzt von Rasensprenger (27. Juni 2009 um 11:55)

  • Uups, vergessen hochzuladen, jetzt sollte es dran sein
    Oh,und ich programmiere unter Linux.

    -------------

    Ich denke, das ist für Viele einfacher:

    The User

  • Hallo!

    Forum stimmt schon.

    Zunächst einmal solltest du deinen Quellcode etwas aufräumen:
    -Die Struktur hat einen sinnlosen Namen (man denkt da an komplexe Zahlen) und dieser scheint auch nicht in Übereinstimmung mit deiner Namenskonvention zu stehen,
    -for-Schleife sieht so aus:

    Code
    for(int i = 0; i != Anzahl.Monster; ++i)


    Das solltest du dir angewöhnen.
    -if(Komma == 0): Dieser Fall kann nicht eintreten, da das if-else if-else-Konstrukt alles abdeckt. Also kannst du es entfernen.
    -*"," ist sehr unverständlich, verwende statt dessen einfach ',' dann hast du direkt einen char-Typen.
    -Die Einrückung ist unsauber
    -Die Variable "Komma" erfüllt keinerlei Sinn, mach in der Schleife einfach das:


    Wenn du nicht nur 1 und 2 sondern beliebige Stellen prüfen möchtest, solltest du std::string::find_first_of(',') sowie std::string::substr verwenden.
    -"Monster[i][0] = int(Eingabe[0])" tut wahrscheinlich nicht das Gewünschte: Der ASCII-Code der Zahl in der Eingabe wird dann gespeichert. Wenn es nur von 0-9 gehen soll, mach es mit "Monster[i][0] = Eingabe[0] - '0'", das funktioniert dann. Doch ist dein Monster-Array auch eher unsauber. Eigentlich sollte es ein eindimensionales Array sein. Wenn du zwei Stellen haben möchtest, musst du einfach die erste mit 10 multiplizieren, z.B.:

    Code
    Monster[i] = 10 * (Eingabe[0] - '0') + Eingabe[1] - '0'


    -Die Funktion GetIntVal schreibst du besser so:

    Code
    inline int GetIntVal(const string& str)
    {
      return atoi(str.c_str());
    }


    -Die Summe jedes Mal auf 0 zurückzusetzen ist eher ungeschickt.

    Verrat mir vor allem, ob beliebig lange Zahlen verwendet werden können sollen. ;)

    Viele liebe Grüße
    The User

  • Oh, ja, mit Sauberkeit hab ichs am Anfang selten^^"
    Dann werd ich das erstmal aufräumen.
    Das Monster-Array soll zweidimensional sein, da es einmal die Anzahl der Monster speichert, und dann deren Herausforderungsgrad.

    Bei dem *"," hatte ich es erst ohne * stehen, und in der Fehlermeldung stand etwas von char* also hab ich das hingesetzt und es funktionierte, aber okai :)

    Einmal editiert, zuletzt von Rasensprenger (27. Juni 2009 um 12:59)

  • So, jetzt ist alles geändert :)

    Ich glaube, die EInrückung ist zum Teil immer noch falsch (hab eig nur das vom Switch geändert)

    Ja, ich finde es unlogisch, 1000 oder mehr (eigentlich schon ab 500) Kreaturen zu töten. Entweder ist man da imm Krieg, und man bekommt kaum Exp, da alles auf die anderen verteilt wird, oder man ist bereits episch oder so, da kriegt man keine EP mehr für die Monster. --> Nein, es sollen keine beliebig lange Zahlen verwendet werden könne :)

    Muss dann jetzt bei der Zuweisung ( Monster[i][1]=GetIntVal(Eingabe.substr(2)); ) noch das GetIntVal hin, oder macht er das selber zu einer Integer Zahl??

    Oh stimmt, die Summe war in der falschen for Schleife, geändert :)


    Oh, ich glaube, der Fehler lag an der letzten Schleife, dort stand
    for (n=0; n!=Anzahl.Monster; ++i) {
    anstatt

    for (n=0; n!=Anzahl.Monster; ++n) {

    Na super -.-

    Okai, dann dank ich dir erstmal :) Es kommt noch das falsche Ergebnis raus, aber es läuft jetzt durch, das ist das wichtigste :)

    Dann werd ich mir bald mal auch die Regeln der Einrückung, formatierung und den guten Programmierstil anschauen und aneignen,

    Danke sehr :)

    Rasensprenger

  • 1. Du verwendest substr falsch
    2. Für beschränkte Längen solltest du lieber die Variante mit 100 * (Eingabe[0] - '0') + 10 * (Eingabe[1] - '0') + Eingabe[2] - '0' verwenden

    Im Übrigen gibt es keine falsche Einrückung, sie muss nur konsistent sein. ;)