Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 24
  1. #11
    Der mit Anatidaephobie Avatar von blackberry
    Registriert seit
    11.07.2008
    Beiträge
    2.350

    Standard

    Ich habe das jetzt mal auf die Schnelle mit einer LinkedList implementiert.

    Grundidee ist, dass man eine maximale Länge für einen Namen vorgibt und dann entsprechend Speicher reserviert: Anzahl der Namen * Maximale Länge pro Name

    Die LinkedList speichert als Datenelement einen Zeicher auf einen char.
    Jetzt liest man einen Namen in den reservierten Speicher ein, fügt die Adresse von dem Namen in die LinkedList ein und liest den nächsten Namen dort ein, wo der andere aufgehört hat.
    Im Speicher sieht das also so aus:
    Name1\x00Name2\x00Name3\x00...
    Dabei gibt es so viele LinkedLists, wie Gruppen -- jede LinkedList stellt also eine Gruppe dar.
    Die Einträge der LinkedLists zeigen dabei dann auf die Namen im Speicher.

    Code:
    #1182907 - Pastie

    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 ^.^

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

    Standard

    Wie man wahrscheinlich sieht programmiere ich erst seit einigen Wochen.
    Aus diesem Grund kenn ich mich nur mit den Standard Befehlen aus.
    Gibt es keine einfache möglichkeit mit scanf/gets/fgets usw namen in einer schleife eingeben zu lassen und danach abzurufen?
    Mein Code bis jetzt:

    Code:
    //Gruppenverteilung
    #include <stdio.h>
    #include <stdlib.h>
    int spieler;
    int anzahl;
    char name[25];
    int auswahl;
    
    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);
        system("Pause");
        system("Cls");
        
        // Eingabe der Spieler
        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
        printf("Welchen Spielername aufrufen?:"),
        scanf("%i",&auswahl);
        printf("\nSie haben Spielername %i. gewaehlt.\n",auswahl);
        system("Pause");
    
        return 0;
    } // Ende main

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

    Standard

    Ich verstehe nicht, wo da jetzt die Frage sein soll. Es gibt keine einfachere Möglichkeit sowas in C zu machen.
    Wenn du später auch auf die Namen zugreifen willst, so musst du dich dann wohl oder übel auch um die Speicherverwaltung kümmern.
    Als Beispiel dafür verweise ich nochmal auf meinen Code: #1182907 - Pastie

    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 ^.^

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

    Standard

    Es wäre einfacher das direkt als Array darzustellen.
    Und die Speicherdarstelleung ist auch falsch. (Name1\x00 POINTER Name2\x00 ...)
    Code:
    #define MAX_PLAYER_NAME_LENGTH 32
    int main()
    {
      char* szAllNames;
      int iPlayers, i = 0, iTotalStrlen = 0;
    
      scanf("%i", &iPlayers);
      szAllNames = (char*) malloc(MAX_PLAYER_NAME_LENGTH * iPlayers);
      for(; i< iPlayers; i++)
      {
          scanf("%s", &szAllNames[iTotalStrlen]);
          iTotalStrlen += strlen(&szAllNames[iTotalStrlen]);
      }
      free(szAllNames)
    }
    (eben aus dem kopf (== wahrscheinlich ein kleiner fehler der es zum abstürzen bringt drin). aber das prinzip sollte klar sein)
    Geändert von wacked (27.09.2010 um 16:08 Uhr) Grund: Ich bin böse and leake wertvollen Speicher

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

    Standard

    Zitat Zitat von wacked Beitrag anzeigen
    Es wäre einfacher das direkt als Array darzustellen.
    Und die Speicherdarstelleung ist auch falsch. (Name1\x00 POINTER Name2\x00 ...)
    Es ist doch direkt als Array implementiert.
    Nur jetzt sag mir noch wie du die dann den Gruppen hinzufügen würdest? TADA: du musst die Namen irgendwie referenzieren.

    Was das (Name1\x00 POINTER Name2\x00 ...) angeht, kann ich nur sagen: falsch von dir, richtig von mir.
    Das Layout ist
    Name1\x00Name2\x00Name3\x00...
    (^------- keine Pointer... das sind wirklich char's!)
    in namesbuf. Referenziert werden jeweils die Anfänge der Namen in den LinkedLists für die Gruppen.

    Bitte beim nächsten Mal genauer lesen.

    Zitat Zitat von wacked Beitrag anzeigen
    iTotalStrlen += strlen(&szAllNames[iTotalStrlen]);
    Das ist falsch. Dann hättest du anschließend folgendes Layout im Speicher:
    Name1Name2Name3...
    Die Namen wären also nicht null-terminiert und somit hättest du Probleme, sobald du versuchst die anzuzeigen, sobald alle Namen eingelesen sind.
    Was du hier also machst ist eine Art strcat.

    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. #16
    Trojaner Avatar von luxury11
    Registriert seit
    30.05.2010
    Beiträge
    56

    Standard

    Vielleicht zur Einfachheit !

    Code:
    struct _User
    { char myName[256]; }User[1024];
    
    static nUseranzahl = 0;
    
    int main(int argc, char **argv)
    {
        //TODO Like in BB Paste.
    }
    Geändert von luxury11 (27.09.2010 um 16:23 Uhr)
    Die Elf steht zwischen der 10 und der 12.

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

    Standard

    Oh sorry so kompliziert will ich nicht denken. Da ich aber nicht komplett als Vollidiot darstellen will füge ich das gruppen zeug noch dazu (natürlich teste ich wieder nicht. dann kann man nämlich fehler machen ohne dass es einem zum verhängniss wird)
    Code:
    struct LIST
    {
        char* szName;
        LIST* Next;
    };
    void DumpList(LIST* LIST)
    {
        LIST* Tmpg_LIST = LIST;
        int i = 0;
        while(Tmpg_LIST->Next)
        {
            printf("%i=>%s\n", i++, Tmpg_LIST->szName);
            Tmpg_LIST = Tmpg_LIST->Next;
        }
        printf("%i=>%i\n", i++, Tmpg_LIST->szName);
    }
    bool IsInLinkedList(LIST* LIST, char* szSearchName)
    {
        LIST* Tmpg_LIST = LIST;
        while(Tmpg_LIST->Next)
        {
    
            if(Tmpg_LIST->szName == szSearchName)
            {
                return true;
            }
            Tmpg_LIST = Tmpg_LIST->Next;
        }
        return Tmpg_LIST->szName == szSearchName;
    }
    bool AddToLinkedList(LIST* LIST,char* szAddName)
    {
        LIST* LastEntry = LIST;
        while(LastEntry->Next)
        {
            LastEntry = LastEntry->Next;
        }
    
        LastEntry->Next = (LIST*) malloc(sizeof(LIST));
        if(!LastEntry->Next)
        {
            return false;
        }
        LastEntry = LastEntry->Next;
        LastEntry->szName = szAddName;
        LastEntry->Next = 0;
        return true;
    }
    Code:
    #define MAX_PLAYER_NAME_LENGTH 32
    int main()
    {
      char* szAllNames;
      LIST* pGroups;
      int iPlayers /* Maximal players NOT players per group*/, i = 0, j = 0, iTotalStrlen = 0, iGroups = 0;
    
    
      scanf("%i", &iGroups);
      pGroups = (LIST*) malloc(sizeof(LIST) * iGroups);
      scanf("%i", &iPlayers);
      szAllNames = (char*) malloc(MAX_PLAYER_NAME_LENGTH * iPlayers);
      
      for(; j < iGroups; j++)
      {
        for(; i < iPlayers; i++)
        {
            scanf("%s", &szAllNames[iTotalStrlen]);
            AddToLinkedList(pGroups[j], &szAllNames[iTotalStrlen]);
            iTotalStrlen += strlen(&szAllNames[iTotalStrlen]);
        }
      }
      for(; j < iGroups; j++)
        DumpLinkedList(pGroups[j]);
       
      free(szAllNames)
    }
    Geändert von wacked (27.09.2010 um 18:42 Uhr)

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

    Standard

    Mit POINTER meinte ich den Pointer auf den nächsten Eintrag der Linked List. (Was natürlich in diesem Fall auch falsch ist aber von meiner Unfähigkeit Strukturen zu lesen herrührt)

    Actually it should be C++. Man darf in C nicht beim deklarien direkt etwas zuweisen oder so was richtig?
    Und das mit der Tempg_LIST und LastEntry liegt daran dass es in dem Code aus dem ich es rauskopiert habe beide globale Variablen sind. Wenn ich dann keine temporären Variablen benutzt hätte würde logischerweiße das Durchsuchen der Liste nicht (mit dieser Funktion) funktioniern.

    Aber lassen wir meine Fehler hier mal raus. Ist schon peinlich genug.

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

    Standard

    Ich versuche gerade ein einfaches Beispiel zu erstellen:
    Daher möchte ich nun erst einmal:
    3 Namen in ein String-Array speichern und auslesen; wie ich 3 integer Werte in ein 3er array speichere ist klar; ich will aber 3 Namen z.B. Max Mustermann, Susi Schneider, usw. in ein array speichern.

    Code:
    #include <stdio.h>
    #include <stdlib.h>
    int laufv;
    char namen[100];
    int auswahl;
    
    int main()
    {
        // Eingabe der Spieler
        for (laufv = 1; laufv <= 3; laufv++)
        {
            printf("Spieler %i: ", laufv);
            scanf("%s",?????);
    
        } // Ende for Eingabe
        system("Pause");
        system("Cls");
    
        // Ausgabe der Spieler
    
            printf("Welchen Spieler moechten sie auswaehlen?:");
            scanf("%i",&auswahl);
            printf("Sie haben Nr.%i gewaehlt. Der Name lautet:%s",&auswahl,????);
            system("Pause");
       
            return 0;
    } // Ende main
    Geändert von FeroX1337 (09.10.2010 um 13:37 Uhr) Grund: Automerged Doublepost

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

    Standard

    Das zeigt mal wieder, dass du meinen Post weder gelesen, noch überhaupt beachtet hast.

    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 ^.^

Seite 2 von 3 ErsteErste 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
  •