Zufaelliges Auswaehlen



  • Hi, ich bin gerade dabei ein Programm zu schreiben, welches Vokabeln zufaellig abfragt. In meinem Array von Pointern

    char* vokabel[MAX_VOK];
    

    stehen schon die Addressen der jeweiligen Strings.

    Nun sollen die Vokabel zufaellig ausgewaehlt und abgefragt werden. Mein Problem dabei ist, dass ich, sofern die Vokabel richtig beantwortet wurde, diese aus dem "Pool" entfernen moechte, sodass sie nicht nochmal zufaellig ausgewaehlt und abgefragt wird.
    Wie sollte ich sowas am besten realisieren?
    Ich habe auch schon ein paar Ideen, nur will ich nicht wild im Array rumkopieren um einen Zeiger auf eine Vokabel aus dem Array zu entfernen.
    Also, wie wuerde man sowas angehen, wenn man ein bisschen mehr Ahnung haette als ich ;)?



  • aktuelle laenge des arrays irgendwo speichern.

    willst du ein element entfernen, dann mach das:

    array[toteselement] = array[--alaenge];

    das letzte element wird einfach vorgezogen.

    ich hoffe, dass deine strings nicht mit malloc() erzeugt sind, sonst muesstest du die noch free()en.



  • Danke c.rackwitz, aber ich werde die speicherbereiche mit free() wieder freigeben muessen :).
    Aber was ist denn der -- Operator?



  • > Danke c.rackwitz, aber ich werde die speicherbereiche mit free() wieder freigeben muessen :).
    dann machs so:

    free(array[toteselement]);
    array[toteselement] = array[--alaenge];

    > Aber was ist denn der -- Operator?
    lies:
    int foo=20, bar=30;
    bar = --foo; // foo ist 19, bar ist 19 [pre-decrement]
    bar = 50;
    bar = foo--; // foo ist 18, bar ist 19 [post-decrement]

    edit: sorry fuer meine fehler, habs korrigiert.



  • Warum bleibt bar 50 und warum ist foo aufeinmal 49?
    Muesste nach der letzen Operation bar nicht 19 und foo 18 sein?



  • sorry, meine konzentration war da nicht ganz so konzentriert wie ich das gerne haette. habs korrigiert.



  • Alles klar, danke.
    Nun hab ich allerdings noch eine Frage:
    Ich moechte nun die Vokabel abfragen. Nun weiss ich allerdings nicht, wie lang der String ist, den der Benutzer dem Programm gibt. Wie lese ich das also am besten ein? Mit fgets() und stdin?



  • Ja.


Anmelden zum Antworten