[gelöst] Benutzung von Strukturen in Schleifen



  • Mmh, vector Erklärungen findet sich im Netz sicherlich massenhaft.
    Die solltest du lesen, da kommst du früher oder später eh nicht drum herum.

    Nur kurz skizziert:

    //Statt deiner Variablen
      einheitenwerte einheit1;
      einheitenwerte einheit2;
      einheitenwerte einheit3;
      einheitenwerte einheit4;
      einheitenwerte einheit5;
    // hat du einen
      vector<einheitenwerte> einheiten;
    // in dem alle Einheiten gespeichert werden.
    // Um später dann so Sachen wie 'kurzel vorhanden?' abzufragen, machst du dann sowas:
    
    for(int i=0; i < einheiten.size(); ++i)
    {
      if(einheiten[i].kuerzel == 'X') // oder sowas
    // mach was
    }
    

    Edit:
    Info's gibt's zB hier im Magazin.



  • Danke, scheint verständlich.

    Also kann ich dann innerhalb der whileschleife eine for-schleife durchlaufen lassen und wenn eine Kürzelübereinstimmung mit dem eingegeben Wert zutrifft wird das erkannt und die Schleife läuft weiter? (habe ich das so richtig verstanden?)

    mfg Lucky Luke

    Edit Also das wichtige an der Sache ist, dass ich das als Überprüfung der Bedingung der whileschleife brauche.



  • Nein, was für eine while-Schleife?
    Du wirst dir am besten eine Funktion bauen:

    bool DeineKlasse::ExistiertKuerzel(char kuerzel)
    {
      for(int i=0; i < einheiten.size(); ++i)
      {
        if(einheiten[i].kuerzel == kuerzel)
          return true;   
      } 
      return false;
    }
    

    Ach so, ich sehe gerade:

    while("zugriff auf irgendein algorithmus der für alle erstellten einheiten die Kürzel durchsucht)

    Das meinst du, oder?
    Ja, das wird dann zu

    while(instanz.ExistiertKuerzel('x')...)
    


  • Genau, das letztere meine ich.

    Aber wie ich anhand des beispiels sehe scheine ich dann dennoch alle kürzel eingeben zu müssen.

    while(instanz.ExistiertKuerzel('x')...
               instanz.ExistiertKuerzel('b')...)//das ich also hier den nächsten buchstaben abfrage??
    

    Falls dies der fall ist bin ich ja wieder beim Ausgangsproblem das ich nicht bei jeder Schleife die kürzel hinzufügen möchte.

    mfg Lucky Luke



  • Wo kommen denn diese Kürzel her, die du mit den Kürzel der Einheiten vergleichen willst?



  • Diese kommen von einer vorrangegangen Abfrage.

    cout << "Spalte:"<<endl;
                         cin >> altspalte;                                        
                         cout << "Zeile:"<<endl;
                         cin >> altzeile;
    

    Um die Sache vllt etwas genauer zu erklären. Am anfang wird eine array erstellt und darüber ein Feld in der dos ausgabe realisiert. Anschließend werden die benutzten Einheiten auf das Feld gesetzt. Wenn ich diese bewegen möchte so wird die Zeile und Spalte abgefragt und dann soll überprüft werden ob der Buchstabe auf dem Feld mit einem einheitenkürzel der möglichen Einheiten von Player 1 übereinstimmt.

    Da ich später weitere Einheiten implementieren möchte wäre es ein Riesenaufwand jedes mal alle Schleifen zu verändern, sodass ich das eben anders lösen möchte.

    Ich hoffe dir ist die Funktionsweise jetzt vllt etwas klarer.



  • Lucky Luke schrieb:

    Ich hoffe dir ist die Funktionsweise jetzt vllt etwas klarer.

    Nö.
    Das sieht doch immer noch so aus wie am Anfang:

    while(!(spielfeld[altzeile-1][altspalte-1]==einheit1.kuerzel
                 || spielfeld[altzeile-1][altspalte-1]==einheit2.kuerzel
                 || spielfeld[altzeile-1][altspalte-1]==einheit3.kuerzel
                 || spielfeld[altzeile-1][altspalte-1]==einheit4.kuerzel
                 || spielfeld[altzeile-1][altspalte-1]==einheit5.kuerzel
                 )
    

    Um die geht es doch und die kannst du doch durch

    while(! ExistiertKuerzel(spielfeld[altzeile-1][altspalte-1]))...
    

    ersetzen.



  • Jockelx schrieb:

    Um die geht es doch und die kannst du doch durch

    while(! ExistiertKuerzel(spielfeld[altzeile-1][altspalte-1]))...
    

    ersetzen.

    Also würde diese eine Zeile alle vorhanden Kürzel überprüfen und bei einem Treffer die Schleife abbrechen?

    Wenn du jetzt ja antwortest danke ich dir recht herzlich, ansonsten würde ich dir einen ausführlicheren Teil des Codes per pn schicken und alles bis ins kleinste Detail erläutern 🙂



  • Ja, bitte schön 😉
    Aber versuch doch die sehr einfache Funktion 'ExistiertKuerzel' selber zu verstehen!
    Da passiert doch nichts wildes!?



  • Danke für die Hilfe.

    Natürlich werde ich mir nun alles möglich dafür Notwendige aneignen, aber ich mußte ja erstmal von dir erfahren ob deine Überlegung im Endeffekt funktioniert.

    mfg Lucky Luke


Anmelden zum Antworten