Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 24
  1. #1
    NoClose Wurm Avatar von FeroX1337
    Registriert seit
    31.12.2008
    Beiträge
    186

    Standard Random Gruppenverteilung erstellen

    Hallo,
    ich versuche gerade eine automatische Gruppenverteilung zu erstellen.
    Es wird abgefragt, wieviel Spieler teilnehmen und wieviel Gruppen es gibt.

    Dann sollen die Namen einglesen werden und zufällig auf die Spieler verteilt werden.

    Code:
    //Gruppenverteilung
    #include <stdio.h>
    #include <stdlib.h>
    int spieler;
    int anzahl;
    char name;
    
    int main()
    {
        // Anzahl der teilnehmenden Spieler
        printf("Wieviel Spieler nehmen am Turnier teil?\n");
        scanf("%i",&spieler);
        printf("Sie haben %i Spieler ausgewaehlt.\n\n", spieler);
        
        // Eingabe der Spieler
        anzahl = 1;
        while (anzahl <= spieler)
        {
            printf("Spieler %i:\n", anzahl);
            // Hier sollen die Namen eingelesen werden
            printf("Spieler %i. heisst %s\n",anzahl,name);
            anzahl = anzahl + 1;
    
        } // Ende while
        system("Pause");
    
        return 0;
    } // Ende main
    Meine Frage nun: Wie lese ich am besten einen Namen ein? Bei scanf kann ich glaube ich nur ein Wort einlesen weil er das Leerzeichen nicht erkennt.
    Dann gibts aber auch noch Befehle wie gets oder getchar; welchen müsste ich jetzt hier anwenden und warum?

    Viele Grüße

  2. #2
    Der mit Anatidaephobie Avatar von blackberry
    Registriert seit
    11.07.2008
    Beiträge
    2.350

    Standard

    http://www.cplusplus.com/reference/c.../cstdio/fgets/

    Beachten: \n ist dann mit im String.

    PDFTT cr3w a.E. — ReiDC0Re, lindor, Sera, berry
    please do feed the trolls crew and elk
    Ehrenwerte Mitglieder im Ruhestand: OpCodez, SFX.
    "Was sich blackberry gerade denkt" — Vorsicht! Frei laufender Wahnsinn!
    Zitat von fuckinghot19: "PS: Blackberry ist auf FH der Trollkönig ^^."
    An dieser Stelle danke ich all meinen Fans und Hatern gleichermaßen ^.^

  3. #3
    NoClose Wurm Avatar von FeroX1337
    Registriert seit
    31.12.2008
    Beiträge
    186

    Standard

    Ich hab jetzt folgendes deklariert:
    char name[25];

    Und bei der Abfrage dann:
    fgets(name, 25, stdin);

    Leider überspringt er diese Eingabe in meiner Schleife

  4. #4
    Der `Toastflüsterer` Avatar von AlterHacker
    Registriert seit
    27.09.2008
    Beiträge
    690

    Standard

    Definition von fgets:
    str: Pointer to an array of chars where the string read is stored.

    Versuchs mal mit einem fgets((char*) &name, 25, stdin);
    Geändert von AlterHacker (26.09.2010 um 17:41 Uhr)

    Security is an illusion.
    Cheater : 8=o
    Normaluser : 8=======o
    Ich : 8================o

    BM: (4|2|0)

  5. #5
    Der mit Anatidaephobie Avatar von blackberry
    Registriert seit
    11.07.2008
    Beiträge
    2.350

    Standard

    fgets(&name, 25, stdin);
    ^--- bitte stirb!

    fflush(stdin);
    sollte dein Problem lösen (vor fgets aufrufen), jedoch ist das Verhalten von fflush bei stdin nicht vom Standard vorgeschrieben... man sollte sich also eigentlich nach einer besseren Variante umsehen.

    PDFTT cr3w a.E. — ReiDC0Re, lindor, Sera, berry
    please do feed the trolls crew and elk
    Ehrenwerte Mitglieder im Ruhestand: OpCodez, SFX.
    "Was sich blackberry gerade denkt" — Vorsicht! Frei laufender Wahnsinn!
    Zitat von fuckinghot19: "PS: Blackberry ist auf FH der Trollkönig ^^."
    An dieser Stelle danke ich all meinen Fans und Hatern gleichermaßen ^.^

  6. #6
    DateMake Dialer Avatar von jojoomgasd
    Registriert seit
    17.05.2010
    Beiträge
    100

    Standard

    Probier mal die Funktion gets_s bei der Funktion wird kein '\n' hinten angehängt

  7. #7
    NoClose Wurm Avatar von FeroX1337
    Registriert seit
    31.12.2008
    Beiträge
    186

    Standard

    Der Beitrag von BlackBerry hat mir sehr geholfen. Erstmal vielen Dank!

    Nur weiß ich nicht genau was der Befehl "fflush(stdin);" macht, den ohne gehts nicht .

    Leider will ich ja mit meinen Eingaben weiterarbeiten und dafür muss ich wissen unter welchem Name diese gespeichert sind.
    Mit welchem Befehl kann ich z.B. auf den 2. Namen zugreifen und diesen willkürlich einer Gruppe zuweisen?

    Viele Grüße

    PS: Sorry für die Anfängerfragen, bin aber leider noch ein Anfänger^^

    Code:
    anzahl = 1;
        while (anzahl <= spieler)
        {
            printf("Spieler %i: ", anzahl);
            fflush(stdin);
            fgets(&name, 25, stdin);
            printf("\nSpieler %i. heisst %s\n",anzahl,name);
            anzahl = anzahl + 1;
    
        } // Ende while
    Geändert von FeroX1337 (26.09.2010 um 18:19 Uhr)

  8. #8
    Der mit Anatidaephobie Avatar von blackberry
    Registriert seit
    11.07.2008
    Beiträge
    2.350

    Standard

    Zitat Zitat von FeroX1337 Beitrag anzeigen
    Nur weiß ich nicht genau was der Befehl "fflush(stdin);" macht, den ohne gehts nicht .
    Das darf offiziell niemand wissen:
    Zitat Zitat von http://www.utas.edu.au/infosys/info/documentation/C/CStdLib.html#fflush
    Effect undefined for input stream.
    Tatsache ist, dass man scanf nicht benutzen sollte, da es die böse Angewohnheit hat Zeichen im input buffer zu belassen, obwohl diese bereits zur Auswertung der Ausdrücke in scanf benutzt wurden.

    In dem Fall heißt das: scanf liest deine Zahl ein und lässt das \n (Zeilenumbruch; generiert, wenn du ENTER drückst) im input buffer.
    Nun kommt fgets, welches genau auf so ein Zeichen wartet um abzubrechen - es findet dieses Zeichen - und (wer hätte es gedacht) bricht ab.

    Was fflush(stdin) jedoch auf allen von mir bisher benutzten Systemen getan hat (aber immer im Kopf behalten: es dürfte sich auch anders verhalten), ist den input buffer zu leeren. Damit wartet fgets dann wirklich auf neue Zeichen und liest nicht die ein, die bereits da sind.

    Zitat Zitat von FeroX1337 Beitrag anzeigen
    Mit welchem Befehl kann ich z.B. auf den 2. Namen zugreifen und diesen willkürlich einer Gruppe zuweisen?
    Was für eine Gruppe? Du hast keine Gruppen.

    PDFTT cr3w a.E. — ReiDC0Re, lindor, Sera, berry
    please do feed the trolls crew and elk
    Ehrenwerte Mitglieder im Ruhestand: OpCodez, SFX.
    "Was sich blackberry gerade denkt" — Vorsicht! Frei laufender Wahnsinn!
    Zitat von fuckinghot19: "PS: Blackberry ist auf FH der Trollkönig ^^."
    An dieser Stelle danke ich all meinen Fans und Hatern gleichermaßen ^.^

  9. #9
    NoClose Wurm Avatar von FeroX1337
    Registriert seit
    31.12.2008
    Beiträge
    186

    Standard

    Zitat Zitat von BlackBerry Beitrag anzeigen
    Was für eine Gruppe? Du hast keine Gruppen.
    Ich will sagen wir mal 20 Namen einlesen (mit der While Schleife) und dann die 20 Namen in 4(soll variabel sein) Gruppen unterteilen.
    Um dies zu machen muss ich ja auf die eingegebenen Namen zugreifen.
    Nur wie ist die Frage. Und die 2. Frage dann wie ich die Gruppenverteilung zufällig mache.

  10. #10
    Bad Times Virus
    Registriert seit
    14.03.2009
    Beiträge
    579

    Standard

    Code:
    char szCoolName[20][32];
    ...
    printf("Rand User:%s", szCoolName[rand()%20]);
    und malloc/free oder new/delete sind ein muß wenn es variabel sein soll.

Seite 1 von 3 123 LetzteLetzte

Ähnliche Themen

  1. [VB .NET] Random position?
    Von Kaspersky im Forum .NET Sprachen - Techniken
    Antworten: 10
    Letzter Beitrag: 17.07.2009, 20:06
  2. Zahlen Random
    Von inmate im Forum Source Codes
    Antworten: 1
    Letzter Beitrag: 24.06.2009, 13:57
  3. [C#] Random aus .txt
    Von unna456654 im Forum .NET Sprachen - Techniken
    Antworten: 2
    Letzter Beitrag: 16.03.2009, 12:00
  4. [PHP] Random Banner anzeigen!
    Von Linx002 im Forum PHP
    Antworten: 0
    Letzter Beitrag: 16.12.2007, 11:16

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •