C-Programmierung Aufgabe Structs



  • Hallo!

    Ich versuche schon seit Stunden diese Aufgabe zu lösen, da ich aber leider ein absoluter Programmier-Anfänger bin komme leider nicht voran. Ich konnte bisher nur die ersten zwei Aufgabenteile fehlerlos lösen. Schon ab dem dritten Aufgabenpunkt zeigt es mir ständige Fehlermeldungen an und ab dem vierten Punkt bin ich total ratlos. Nun gebe ich es auf und suche mir hier Hilfe.

    Ich hoffe der ein oder andere kann mir weiterhelfen 🙂

    Erstellen Sie ein Programm zur Verwaltung der Spieler (Player) einer Fußballmannschaft (Max 39 Spieler)
    Für jeden Fußballspieler sollen folgende Informationen gespeichert werden:

    1. Rückennummer (int number) - Achtung: eine ganze Zahl zwischen 1 und 39)
    2. Die Positionen der Spieler: STRIKER, MIDFIELDER, LIBERO, DEFENDER, KEEPER, NO_POSITION
    3. Nachname (max 30 Zeichen)
    4. Vorname (Max 30 Zeichen)

    Das Programm soll wie folgt aussehen:

    1. ein Aufzählungstyp Position definieren
    2. einen Struct-Datentyp Player definieren
    3. Funktion die die Daten aller Spieler mit passenden Eingabeaufforderungen von der Konsole einliest. Die Spiele können dabei mit einer beliebigen RückenNummer-Reihenfolge eingegeben werden
    4. Funktion die die Spieler Daten in geeigneter Weise in einem Player-Array speichert. Überlegen Sie dabei, wie Sie in einer Array Position hinterlegen können, dass noch kein Spieler mit entsprechender Rückennummer eingegeben wurde.
    5. Funktion, die nach vollständiger Eingabe der Spielerdaten die eingelesenen Daten ausgibt. (Je ein Spieler in einer Zeile und Spieler nach Rückennummer sortiert)
    6. verzichten Sie auf die Nutzung globaler Variablen. Alle Variablen sollen lokal deklariert werden.

    Bisher habe ich folgendes:

    #include <stdio.h>
    #include <string.h>

    #define DESIGNATORLENGHT 30
    typedef char Designator[DESIGNATORLENGHT];

    typedef enum {STRIKER, MIDFIELDER, LIBERO, DEFENDER, KEEPER, NO_POSITION} Position;

    typedef struct {
    int number;
    Position position;
    Designator lastName;
    Designator firstName;
    Player player;
    }

    (aber wie gibt man ein dass die Spielernummer nur zwischen 1 und 39 sein soll)

    Ab jetzt wird mir eine Fehlermeldung gezeigt:

    Player readPlayer () {
    int number;
    Position position;
    Designator lastName;
    Designator firstName;
    Player player; ???

    printf(''Geben Sie den vollständigen Namen, Rückennumer und die Position des Spielers an: '');
    scanf(''%s %s %d %s'', &firstName, &lastName, &number, &position);

    strcpy(player.firstName, firstName);
    strcpy(player.lastName, lastName);
    player.number = number;
    strcpy(player.position, position);

    return player;
    }

    Und wie kann man es so programmieren, dass man mehrere Spieler eingeben kann?

    Weiter komme ich leider nicht mehr. Hat also jemand von euch eine Ahnung wie man ab Punkt 3 weiter programmieren würde? 😞

    Wäre euch sehr dankbar, wenn ihr mir weiter helfen könntet!

    Vielen Dank!



  • @cnewcomer Ist beim typedef vom Spieler die Klammersetzung eirklich so, oder ist das ein Übertragungsfehler?

    Mehrer Variablen vom selben Typ packt man in ein Array - das geht auch mit structs.

    Über ein Array kann man dann mit einer Schleife gehen.

    Warum hast du bei scanf auch bei den Namen Adressoperatoren, bei strcpy aber nicht?
    (bevor du wild änderst, schau ein Beispiel mit %s bei scanf an)



  • @DirkB der Anfang stimmt, den ersten Fehler zeigt es mir beim scanf %s an, wobei ich nicht weiß was ich hierbei anders machen müsste
    Aber die Klammersetzung beim typedef struct ist richtig so
    Wüsstest du aber wie ich dann ab Punkt 3 weiter machen muss?



  • @cnewcomer Es wäre sehr hilfreich, wenn du die Fehlermeldung hier auch nennen würdest (copy/paste bitte). (Und außerdem deinen Code als solchen markieren würdest, das geht mit drei „ˋ“ Zeichen oder durch Markieren des Codes und Klicken auf den </>-Button)



  • @cnewcomer sagte in C-Programmierung Aufgabe Structs:

    der Anfang stimmt,
    Aber die Klammersetzung beim typedef struct ist richtig so

    typedef struct { 
    int number; 
    Position position; 
    Designator lastName;
    Designator firstName;
    Player player;
    }
    

    Das ist eine namenlose struct. Der Typ Player sollte noch gar nicht bekannt sein.

    @cnewcomer sagte in C-Programmierung Aufgabe Structs:

    den ersten Fehler zeigt es mir beim scanf %s

    Hast du dir meinen Hinweis mit dem Adressoperator mal überlegt?

    @cnewcomer sagte in C-Programmierung Aufgabe Structs:

    Wüsstest du aber wie ich dann ab Punkt 3 weiter machen muss?

    Ja.
    Mit Array und Schleife.

    Beim Programmieren kommt es auf jedes Zeichen an.
    Meist sind die Fehlermeldungen auch sehr detailiert und der Compiler sagt, was er wo nicht mag.
    Ein C-Compiler gibt auch Warnungen aus. Das macht er nicht ohne Grund.
    Er weist damit auf mögliche Fehler hin.
    Meist ist die Einstellung dafür noch zurückhaltend,