Lagerverwaltung switch Tabelle



  • Habe zwei drei Fragen zu dem angehaengten unfertigen Programm aus meinem Übungsbuch.

    int count = 0
    

    Ich glaube ich habe den Zusammenhang nicht verstanden, warum kommt gerade hier int count = 0 hin?

    1. Der Aufbau der Switch Verzweigung
      Hier verstehe ich mehrere Ansätze nicht.
      Wieso muss es hier artikel[count].artikelnummer = count heißen?
      Warum muss der Indexzähler gerade so gesetzt werden...da fehlt mir der Zusammenhang gerade
    printf("Artikelnummer lautet %d\n\n ,count);
    

    --> Warum das gedoppelte \n\n hier?

    printf("\nDaten wurden aufgenommen\n");
    

    und warum das \n davor hier?

    Danke schonmal (:

    switch (abfrage)
                  {
                         case 1: artikel[count].artikelnummer=count;
                         printf("Artikelbezeichnung : ");
                         fgets(artikel[count].artikelbezeichnung,100,stdin);
                         printf("Anzahl der Artikel : ");
                         scanf(%d" ,&artikel[count].artikel_anzahl);
                         fflush(stdin);
                         printf("\nDaten wurden aufgenommen\n");
                         printf("Artikelnummer lautet %d\n\n ,count);
                         count++; /* Anzahl Artikel erhoehen*/
                         break;
    
    //Meine Lagerverwaltung mit Strukturen//
    #include <stdio.h>
    
    struct meine_lagerverwaltung
    {
           long artikelnummer;
           char artikelbezeichnung[100];
           int artikel_anzahl;
    }
           artikel[100];
    
           int count = 0
    
              int main()
    {
              artikel[100}
              int abfrage,
                  nummer;
    
              do
              {
                  printf("\n Lagerverwaltung\n\n");
                  printf("<1> Neuen Artikel einlesen\n");
                  printf("<2>Artikel ausgeben\n");
                  printf("<3>Programmende\n");
                  printf("Bitte auswaehlen : ");
                  scanf("%d" ,&abfrage);
                  fflush(stdin);
    
                  switch (abfrage)
                  {
                         case 1: artikel[count].artikelnummer=count;
                         printf("Artikelbezeichnung : ");
                         fgets(artikel[count].artikelbezeichnung,100,stdin);
                         printf("Anzahl der Artikel : ");
                         scanf(%d" ,6artikel[count].artikel_anzahl);
                         fflush(stdin);
                         printf("\nDaten wurden aufgenommen\n");
                         printf("Artikelnummer lautet %d\n\n ,count);
                         count++; /* Anzahl Artikel erhoehen*/
                         break;
                  }
    
              }
              while(abfrage !=3)
    
              return 0;
    }
    


  • Da '\n' stehtfür NewLine bei der Ausgabe.
    Ein doppeltes '\n' erzeugt eine Leerzeile.
    Mit dem '\n' am Anfang wird sichergestellt, dass der Text in einer neuen Zeile beginnt.

    Das int count = 0; an dieser Stelle definiert ein global Variabel und initialisiert sie mit 0. (Globale Variable werden allerdings auch automatisch mit 0 initialisiert)
    count gibt wohl die aktuelle Anzahl der Artikel an.

    Und durch artikel[count].artikelnummer = count gibt es eine eindeutige Artikelnummer. Später kannst du dann ja auch Artikelnummer und Index unterschiedlich machen.



  • Dein Quelltext ist schön bunt 👍

    An der Farbe kann man erkennen das in Zeile 39 etwas fehlt.

    Zu folgendem:

    fflush(stdin);
    

    Da das nicht Standard-C ist, kannst du nach meinen Infos nur bei Microsoft-Compilern erwarten das das funktioniert ⚠

    MfG f.-th.



  • DirkB schrieb:

    ... Globale Variable werden allerdings auch automatisch mit 0 initialisiert

    Darauf sollte man sich besser nicht verlassen, weil wohl stark compilerabhängig. Mein Borland-Compiler CBuilder macht das nicht und liefert irgendwelche zufällige Zahlen! 😃



  • berniebutt schrieb:

    DirkB schrieb:

    ... Globale Variable werden allerdings auch automatisch mit 0 initialisiert

    Darauf sollte man sich besser nicht verlassen, weil wohl stark compilerabhängig. Mein Borland-Compiler CBuilder macht das nicht und liefert irgendwelche zufällige Zahlen! 😃

    komisch.

    Unless they have an explicit initializer, all objects with static duration are given implicit initializers—the effect is as if the constant 0 had been assigned to their components. This is in fact widely used—it is an assumption made by most C programs that external objects and internal static objects start with the value zero.

    http://publications.gbdirect.co.uk/c_book/chapter6/initialization.html



  • volkard: berniebutt benutzt den BCB 1 (zumindest letztes Jahr noch). Da sollte man sich über gar nichts wundern.



  • berniebutt schrieb:

    DirkB schrieb:

    ... Globale Variable werden allerdings auch automatisch mit 0 initialisiert

    Darauf sollte man sich besser nicht verlassen, weil wohl stark compilerabhängig. Mein Borland-Compiler CBuilder macht das nicht und liefert irgendwelche zufällige Zahlen! 😃

    Dann hält sich dein CBuilder aber nicht an den Standard

    Steht auch schon mehrfach hier im Forum:
    Siehe http://www.c-plusplus.net/forum/233792
    oder http://www.c-plusplus.net/forum/284391?highlight=globale+variablen+initialisieren



  • Michael E. schrieb:

    volkard: berniebutt benutzt den BCB 1 (zumindest letztes Jahr noch). Da sollte man sich über gar nichts wundern.

    14 Jahre. Sowas gehört in seine Sig.



  • volkard schrieb:

    14 Jahre. Sowas gehört in seine Sig.

    Ist schon gut, wenn es heute für so etwas verlässliche Standards in C gibt. 🕶 Das war nicht immer so. In den Zeiten vor C musste man z.B. Programme in FORTRAN oder ähnlichem schreiben. Da gab es auf jeder Zielmaschine einen anderen Compiler mit völlig anderen Bedingungen obwohl vieles Standard. Ich verlasse mich bei solchen Kleinigkeiten auch heute nicht auf den Compiler, wenn man das durch einfache eigene Initialiserungen oder Zuweisungen sauber machen kann. Anders wäre ich bei jeder Programmentwicklung völlig baden gegangen oder hätte damit kein Geld verdienen können! 😮



  • Dein Leerbuch scheint tatsächlich leer zu sein, der vermittelte fehlerfreie Inhalt in Form der Beispiele entspricht annähernd einer leeren Menge.

    - globale Variablen sind allermeist Müll (absolut nicht für Anfänger geeignet, meist nur Faulheit der Codeautoren)

    fgets(artikel[count].artikelbezeichnung,100,stdin);
                         printf("Anzahl der Artikel : ");
                         scanf(%d" ,&artikel[count].artikel_anzahl);
                         fflush(stdin);
    

    - fgets und scanf in einem Kontext mischen ist ebenso Müll, d.h. entweder oder
    - in <artikelbezeichnung> wird meistens auch ein '\n' enthalten sein (höchstwahrscheinlich nicht gewünscht)
    - fflush(stdin); stempelt deinen Fachbuchautor nochmals als Dilettanten ab

    Deine Fragen nach '\n' deuten darauf hin, dass du noch nicht zum eigentlichen Problem deines Codes vorgedrungen bist sondern dich noch mit Nebensächlichkeiten aufhälst.



  • - fflush(stdin); stempelt deinen Fachbuchautor nochmals als Dilettanten ab
    Das ist so nicht ganz richtig.

    Der Autor wird wahrscheinlich von hier
    http://msdn.microsoft.com/en-us/library/9yky46tz(v=vs.71).aspx
    gesponsert :p


Log in to reply