Benötige dringend Hilfe zu einer Aufgabe (Datenstrukturen)



  • Hi,
    ich wollte fragen, ob mir evtl jemand bei der Lösung dieser Aufgabe helfen kann.

    In einem C-Programm sollen Bücher mit Entleihern und Vormerkungen für mehrere
    Personen verwaltet werden. Geben Sie alle erforderlichen Deklarationen und Definitionen
    (typedef, struct, …) an, so dass die folgenden Anweisungen formal korrekt sind:

    printf ("Bitte Buch-Nummer eingeben: ");
    scanf ("%i", &buch_nr);
    printf ("Bitte Verfasser 1 eingeben: ");
    scanf ("%s", buch[buch_nr].verfasser[1]);
    strcpy(buch[buch_nr].titel[0], "C von A bis Z");
    strcpy(buch[buch_nr].verlag, "Galileo Press");
    strcpy(buch[buch_nr].ort, "Bonn");
    buch[buch_nr].auflage[2].jahr= 2006;
    printf("Bitte ISBN der 2. Auflage eingeben: ");
    scanf("%s", buch[buch_nr].auflage[2].isbn);
    printf("Bitte Preis (VK in Cent) der 2. Auflage eingeben: ");
    scanf("%lf", &buch[buch_nr].auflage[2].preis);
    strcpy(buch[12].entleiher.name, "Meier");
    strcpy(buch[12].vormerkung[1].matr_nr, "471100");
    

    habe bereits 2 Bücher und das inet durchsucht, aber da finde ich nichts zu solchen verschachtelten Strukturen, bzw nichts, was mir wirklich weiterhilft.
    Deswegen habe ich mir gedacht, wenn ich eine passable Lösung hätte, ich es mir auf alles herleiten kann und dieses Thema dadurch besser verstehe.

    Danke schonmal im voraus,
    mfg



  • Bei dem genannten Buchtitel muss ich mir noch sehr überlegen, ob ich helfe. 😞



  • typedef struct buchauflage
    {
        int jahr;
        char isbn[100];
        double preis;
    }AUFLAGE;
    
    typedef struct buchentleiher
    {
        char name[100];
    }BUCHENTLEIHER;
    
    typedef struct buchvormerkung
    {
        char matr_nr[100];
    }BUCHVORMERKUNG;
    
    typedef struct buchstruktur
    {
        char verfasser[100];
        char verlag[100];
        char *titel[100];
        char ort[100];
        AUFLAGE auflage[100];
        BUCHENTLEIHER entleiher;
        BUCHVORMERKUNG vormerkung[100];
    }BUCH;
    


  • int buch_nr;
        BUCH buch[100];
    


  • wow, ich danke dir...
    2 Fragen habe ich aber noch.

    Warum ist hier titel ein pointer, und das ganze andere nicht, und warum ist in der Angabe bei Zeile 12. ( &buch[buch_nr].auflage[2].preis ) dieses & da?
    Das hat ja was mit den Pointern zu tun, aber was genau bezweckt es in diesem Beispiel?



  • Das & gibt eine Adresse im Speicher anstelle des Wertes zurück. Bei scanf musst du dies mit angeben, damit er weis ab wo er den Wert im Speicher schreiben muss. Der Titel ist wohl aus Versehen ein Pointer. Zeiger sind nichts weiter als eine Adresse im Speicher.



  • das ist mir schon bewusst, aber was hat dieses & in genau dieser Zeile verloren?
    würde es in dem Beispiel nicht auch ohne das & gehen, so wie "ddddd" die lösung geschrieben hat? Ich denke es ist eher von den Profs um uns zu verwirren, oder irre ich mich da?



  • Das ist nicht um euch zu verwirren, sondern scanf erwartet einen Zeiger als Parameter, weshalb du die Adresse deiner Variablen angeben musst!



  • ah ja is ja eig. klar.. danke,
    nur stellt sich mir immer noch die Frage, wieso es denn bei den ganzen anderen scanf's nicht ist? kenne das scanf nur mit &, hier in den Datenstrukturen (in der Angabe zumindest) fehlt es 2 mal...ist das nun ein Fehler der Angabe, oder gibt es einen bestimmten Grund, wieso es hier nicht immer auftaucht?

    ansonsten ist mir das Thema nun klar und ich danke euch sehr 🙂



  • Siehst du hier:

    int zahl;
    scanf("%i", &zahl);
    
    int *pzahl = (int*) malloc(sizeof(int)); //speicher anfordern
    scanf("%i", pzahl);
    free(pzahl); //und wieder freigeben
    

Anmelden zum Antworten