Strukturen in Strukturen Kaffee Artikelnummer Beispiel



  • Heyho, es geht mir um folgenden Abschnitt mit der printf() Funkion:

    printf("Artikelnummer  : %ld\n" ,artikel.artikelnummer);
           printf("Artikel        : %s"    ,artikel.artikelbezeichnung);
           printf("Anzahl         : %d\n"  ,artikel.anzahl);
           printf("Eingegangen am : %02d.%02d.%4d\n", 8
           artikel.artikeleingang.tag, 8
                   artikel.artikeleingang.monat, 8
                   artikel.artikeleingang.jahr);
    

    Ich soll einen Fehler bei printf("Eingegangen am haben...)
    Den finde ich nicht. Problem ist, dass mein Leerbuch mir außerdem nicht erklärt wo die 8 herkommt---haengt das mit den Laengen 02,02 und 04 zusammen? Könnte ich mir jetzt daraus schließen...

    /* Strukturen in Strukturen */
    #include <stdio.h>
    
    struct datumsangabe
          {
            int tag;
            int monat;
            int jahr;
          };    
    
    struct lagerverwaltung
          {
           long artikelnummer;
           char artikelbezeichnung[100]; 
           int anzahl;
           struct datumsangabe artikeleingang;
          }
           artikel;
    
           int main()
    {
           artikel.artikelnummer = 123456;
           strcpy(artikel.artikelbezeichnung, "Kaffeedose");
           artikel.anzahl               = 10;
           artikel.artikeleingang.tag   = 15;
           artikel.artikeleingang.monat = 02;
           artikel.artikeleingang.jahr  = 2002;
    
           printf("Artikelnummer  : %ld\n" ,artikel.artikelnummer);
           printf("Artikel        : %s"    ,artikel.artikelbezeichnung);
           printf("Anzahl         : %d\n"  ,artikel.anzahl);
           printf("Eingegangen am : %02d.%02d.%4d\n", 8
           artikel.artikeleingang.tag, 8
                   artikel.artikeleingang.monat, 8
                   artikel.artikeleingang.jahr);
    
           return 0;
    }
    

  • Mod

    Die Achten gehören da schlicht und einfach nicht hin.



  • Du darfst ruhig schreiben, wie der Fehler heißt.
    Wird aber mehr eine Warnung sein, in der Art "Mehr Parameter an printf übergeben, als im Formatstring angegeben" .

    Du möchtest mit printf drei Werte ausgeben (erkennbar an den drei %), übergibst aber sechs Werte.
    Du weißt nicht wofür die 8en stehen. Entferne sie doch einfach mal und schau was passiert.

    Die 8en nützen nur dann, wenn statt der "%02d" ein "%0*d" steht. Dann ist aber das Feld zu groß (8 statt 2).

    Schau doch mal http://www.cplusplus.com/reference/clibrary/cstdio/printf/



  • Ohne Die ganzen 8ten geht das wunderbar...frage mich nur gerade warum das dann in dem Buch drin ist


  • Mod

    Zwiebels schrieb:

    Ohne Die ganzen 8ten geht das wunderbar...frage mich nur gerade warum das dann in dem Buch drin ist

    Es wäre nicht das erste Lehrbuch mit groben Fehlern. Für das Protokoll: Wie heißt es denn?



  • ist C Programmierung von Markt und Technik, dass ich neben mitp Einführung in C Programmierung benutze



  • So wie die 8en platziert sind, würde ich fast vermuten, dass sie Backslashes ("\") sein sollen und somit anzeigen, dass die (logische) Zeile noch weitergeht. Das wäre zwar recht sinnlos und wieso es statt \en 8en sind, erschließt sich mir auch nicht. Aber die Platzierung lässt es irgendwie nahe liegen ...
    Ist der Code direkt so im Buch abgedruckt oder stammt er von einer beiliegenden CD?


  • Mod

    Dann wäre es anstatt einem Fehler ein komischer Stil, weil absolut unnötig.



  • Zwiebels schrieb:

    ...Leerbuch...

    Mich wundert sowieso, dass in einem leeren Buch überhaupt was drinsteht.

    artikel.artikeleingang.monat = 02;
    

    Schon mal überlegt, was passiert wenn dort z.B. 08 stehen würde?



  • Leerbücher sind was tolles 😃 Sooo viele weiße Seiten 😃


Log in to reply