Problem bei Aufgabe mit Datenstrukturen



  • Also ich habe das jetzt soweit geändert:

    #include <stdio.h>
    
    /*ISO-Normdatum aus 3 Zahlen: Jahr, Monat, Tag*/
    typedef int ISO8601_JJJJMMTT[3];
    
    /* Struktur für ein Mensa-Gericht */
    typedef struct{
      char bezeichnung[100]; /* Bezeichnung des Gerichts */
    
      char spezialkost; /* Max. eine Angabe (Buchstabe) für Spezialkost:
            'R', 'S', 'A', 'F', 'V' oder keine Angabe(' ') */
    
      int zusatzstoffe[3];/* Max. 3 Angaben (Zahlen) für Zusatzstoffe.
                0 bedeutet keine Angabe */
      int centpreisStud; /* Studierendenpreis in Euro-Cent */
      int centpreisBed; /* Bedienstetenpreis in Euro-Cent */
      char zusatz[20]; /* Sonst. Angaben, z.B. "Grill" oder "Wok" */
      ISO8601_JJJJMMTT datum;
    } Mensa_Essen;
    
    int main()
    {
      int i;
      int datum[3];
    
      Mensa_Essen mlst[4] = { { "Gyros", 'S', {0,0,0}, 100, 280, "Pfanne", {2014,1,6} },
                     { "Döner", 'R', {0,0,0}, 100, 280, "Pfanne", {2014,1,7} },
                     { "Döner", 'G', {0,0,0}, 100, 280, "Pfanne", {2014,1,8} },
                     { "Tofugeschnetzeltes", 'V', {0,0,0}, 100, 280, "Pfanne", {2014,1,9} }
                      };
    
      for(i=0; i<4 ; i++)
        printf("_______________\n %s (%c, %i, %i, %i)\n %i\n %i\n %s\n %i.%i.%i\n",
        mlst[i].bezeichnung,mlst[i].spezialkost,mlst[i].zusatzstoffe[0],
        mlst[i].zusatzstoffe[1], mlst[i].zusatzstoffe[2],mlst[i].centpreisStud,
        mlst[i].centpreisBed, mlst[i].zusatz, datum[0], datum[1], datum[2]);        
    
      return;
    }
    

    Dies ist meine derzeitge Ausgabe:

    _______________
    Gyros
    (S 0, 0, 0)
    100
    280
    Pfanne
    15773923. 0.4195952
    _______________
    Döner
    (R 0, 0, 0)
    100
    280
    Pfanne
    15773923. 0.4195952
    _______________
    Döner
    (G 0, 0, 0)
    100
    280
    Pfanne
    15773923. 0.4195952
    _______________
    Tofugeschnetzeltes
    (V 0, 0, 0)
    100
    280
    Pfanne
    15773923. 0.4195952

    Ich habe das

    int datum[3];
    

    da noch eingefügt, da mir sonst angegeben wurde, dass das "datum" nicht deklariert sei und da zum ersten mal in der Funktion genutzt wird. Müsste ich das sonst in der Struktur deklarieren, denn so zeigt er mir ja nicht den eigentlichen Wert an.

    Schon mal eine andere Frage. Hinterher soll ja eine Suchfunktion möglich sein. Müsste ich dann, um etwas in den 4 Tagen suchen zu können, für jeden Tag ein Datenfeld erstellen oder alle in einem?



  • Ok, wie ich gerade in der Aufgabenstellung lese, soll ein Datenfeld mit 4 Elementen, sprich den jeweiligen Tagen erstellt werden.

    Definieren Sie eine Datenstruktur, die geeignet ist, den Speiseplan eines Wochentags vollständig abzubilden. Für die einzelnen Gerichte sollen Sie die vorgegebene Struktur Mensa_Essen benutzen. Der Speiseplan eines Wochentages soll zusätzlich das Datum in ISO-Normdarstellung enthalten. Der Datentyp für das Datum ist ebenfalls vorgegeben und heißt ISO8601_JJJJMMTT . Außerdem muss ihre Struktur die Angabe des Wochentags enthalten, und zwar als Integer-Zahl (Montag=1, Dienstag=2, ...).
    In Ihrem Programm sollen die Speisepläne für 4 aufeinander folgende Mensa-Betriebstage hinterlegt werden. Dazu müssen Sie ein Datenfeld bestehend aus 4 Elementen Ihres Datentyps für "Struktur für einen Wochentag" anlegen.

    Ich bin gerade ein bisschen am verzweifeln. Heißt das jetzt, dass ich eine extra typedef struct erstellen muss, die 4 mal die Struktur Mensa_Essen beinhaltet?



  • datum ist ein Element von Mensa_Essen mlst.
    So wie zusatzstoffe auch.

    Also Zeile 25 wieder löschen und bei der Ausgabezeile das datum korrigieren.

    pepe90 schrieb:

    Müsste ich dann, um etwas in den 4 Tagen suchen zu können, für jeden Tag ein Datenfeld erstellen oder alle in einem?

    Wie bezeichnest du denn das, was du gerade hast (Mensa_Essen mlst)?
    Ist das für jeden Tag ein Datenfeld oder alle in einem?



  • Also mlst ist jetzt nur ein Datenfeld für ein Tag. Also wir müssen eine Struktur für die 4 tage erstellen.
    Ich habe das mal hier so umgestellt:

    #include <stdio.h> 
    
    /*ISO-Normdatum aus 3 Zahlen: Jahr, Monat, Tag*/ 
    typedef int ISO8601_JJJJMMTT[3]; 
    
    /* Struktur für ein Mensa-Gericht */ 
    typedef struct{ 
      char bezeichnung[100]; /* Bezeichnung des Gerichts */ 
    
      char spezialkost; /* Max. eine Angabe (Buchstabe) für Spezialkost: 
            'R', 'S', 'A', 'F', 'V' oder keine Angabe(' ') */ 
    
      int zusatzstoffe[3];/* Max. 3 Angaben (Zahlen) für Zusatzstoffe. 
                0 bedeutet keine Angabe */ 
      int centpreisStud; /* Studierendenpreis in Euro-Cent */ 
      int centpreisBed; /* Bedienstetenpreis in Euro-Cent */ 
      char zusatz[20]; /* Sonst. Angaben, z.B. "Grill" oder "Wok" */  
    } Mensa_Essen; 
    
    typedef struct{
      int tag;
      ISO8601_JJJJMMTT datum;
      Mensa_Essen[4];
      } wochentag;
    
    int main() 
    {
      wochentag day [4] = { {2,{2014,01,01},
      			{ "Gyros", 'S', {0,0,0}, 100, 280, ' ' }, 
                     	{ "Döner", 'R', {0,0,0}, 100, 280, ' ' }, 
                     	{ "Döner", 'G', {0,0,0}, 100, 280, ' ' }, 
                     	{ "Tofugeschnetzeltes", 'V', {0,0,0}, 100, 280, ' ' }}
                         {3, {2014,01,01},
      			{ "Gyros", 'S', {0,0,0}, 100, 280, ' ' }, 
                     	{ "Döner", 'R', {0,0,0}, 100, 280, ' ' }, 
                     	{ "Döner", 'G', {0,0,0}, 100, 280, ' ' }, 
                     	{ "Tofugeschnetzeltes", 'V', {0,0,0}, 100, 280, ' ' }}
                         {4, {2014,01,01},
      			{ "Gyros", 'S', {0,0,0}, 100, 280, ' ' }, 
                     	{ "Döner", 'R', {0,0,0}, 100, 280, ' ' }, 
                     	{ "Döner", 'G', {0,0,0}, 100, 280, ' ' }, 
                     	{ "Tofugeschnetzeltes", 'V', {0,0,0}, 100, 280, ' ' }}
                         {5, {2014,01,01},
      			{ "Gyros", 'S', {0,0,0}, 100, 280, ' ' }, 
                     	{ "Döner", 'R', {0,0,0}, 100, 280, ' ' }, 
                     	{ "Döner", 'G', {0,0,0}, 100, 280, ' ' }, 
                     	{ "Tofugeschnetzeltes", 'V', {0,0,0}, 100, 280, ' ' }}
        };
        int i,j, wochentag, zusatz;
    
        for(i=1; i<4; i++)
        {
          for()
          { 
            scanf(%i,%i, wochentag, zusatz);
          }
            }
    
      return 0;
    }
    

    Also ich habe das soweit mal probiert und bisher diese Fehlermeldungen erhalten. Klar, die Fehlermeldung bezüglich der for-Schleife ist verständlich. Aber wieso bei dem Datenfeld. Zur Erklärung, die erste Zahl, also die 2,3,4 und 5 soll den Wochentag darstellen, wie es in der Aufgabenstellung gefordert ist.

    quelltext.c:27:14: error: expected identifier or '(' before '[' token
    quelltext.c:28:3: warning: no semicolon at end of struct or union [enabled by default]
    quelltext.c: In function 'main':
    quelltext.c:34:6: error: extra brace group at end of initializer
    quelltext.c:34:6: error: (near initialization for 'day[0]')
    quelltext.c:34:6: error: extra brace group at end of initializer
    quelltext.c:34:6: error: (near initialization for 'day[0]')
    quelltext.c:34:6: warning: excess elements in struct initializer [enabled by default]
    quelltext.c:34:6: warning: (near initialization for 'day[0]') [enabled by default]
    quelltext.c:35:19: error: extra brace group at end of initializer
    quelltext.c:35:19: error: (near initialization for 'day[0]')
    quelltext.c:35:19: error: extra brace group at end of initializer
    quelltext.c:35:19: error: (near initialization for 'day[0]')
    quelltext.c:35:19: warning: excess elements in struct initializer [enabled by default]
    quelltext.c:35:19: warning: (near initialization for 'day[0]') [enabled by default]
    quelltext.c:36:19: error: extra brace group at end of initializer
    quelltext.c:36:19: error: (near initialization for 'day[0]')
    quelltext.c:36:19: error: extra brace group at end of initializer
    quelltext.c:36:19: error: (near initialization for 'day[0]')
    quelltext.c:36:19: warning: excess elements in struct initializer [enabled by default]
    quelltext.c:36:19: warning: (near initialization for 'day[0]') [enabled by default]
    quelltext.c:37:19: error: extra brace group at end of initializer
    quelltext.c:37:19: error: (near initialization for 'day[0]')
    quelltext.c:37:19: error: extra brace group at end of initializer
    quelltext.c:37:19: error: (near initialization for 'day[0]')
    quelltext.c:37:19: warning: excess elements in struct initializer [enabled by default]
    quelltext.c:37:19: warning: (near initialization for 'day[0]') [enabled by default]
    quelltext.c:38:22: error: expected '}' before '{' token
    quelltext.c:59:11: error: expected expression before ')' token
    quelltext.c:59:11: error: expected expression before ')' token
    quelltext.c:61:9: error: expected expression before '}' token

    Dann auch das nächste Problem. Kann ich diese Sache einfach mit Scanf abrufen? Kann man die Suchbedingung mit if-Anweisungen machen?

    Die Suchaufgabe für die Bearbeiter mit gerader Matrikelnummer (inkl. xxxxx0) lautet: 
    Fordern Sie den Programmbenutzer zur Eingabe eines Wochentags (1 ... 5) und zur Eingabe 
    eines Zusatzstoffs (ganze Zahl) auf. Das Programm soll alle Gerichte ausgeben, die den 
    angegebenen Zusatzstoff nicht enthalten und an dem angegebenen Wochentag auf dem 
    Speiseplan stehen.
    


  • pepe90 schrieb:

    typedef struct{
      int tag;
      ISO8601_JJJJMMTT datum;
      Mensa_Essen[4];  //<- Hier fehlt entweder der Typ oder der Feldname
      } wochentag;
    
    scanf(%i,%i, wochentag, zusatz);
    

    WTF?



  • Noch was anderes. Wie kann man denn die Werte einer Struktur ausgeben, die in einer anderen Struktur ist? Ich kann ja nicht die Bezeichnung der Hauptstruktur bei mir ja day auf die einzelnen Variablen aus Mensa_Essen nehmen.



  • Ich muss ja irgendwo die Werte eingeben, die ich suchen muss. Deswegen der scnaf-Befehl. Diese Werte muss ich ja dann mit den Werten aus dem Datenfeld vergleichen und bei den Gerichten, wo das der Fall ist, sollen diese ausgegeben werden.



  • Bashar schrieb:

    pepe90 schrieb:

    typedef struct{
      int tag;
      ISO8601_JJJJMMTT datum;
      Mensa_Essen[4];  //<- Hier fehlt entweder der Typ oder der Feldname
      } wochentag;
    

    Was meinst du mit Typ oder Name? Das ist ja die erste Struktur, die ich in die 2 einfüge.



  • pepe90 schrieb:

    Was meinst du mit Typ oder Name? Das ist ja die erste Struktur, die ich in die 2 einfüge.

    Die Elemente der Struktur werden durch normale Deklarationen innerhalb des struct { .... }-Körpers festgelegt. Ganz normale Deklarationen, sowas wie

    int zahl;
    

    Also ein Typ und ein Variablenname (bzw. Feldname, das sind ja nicht wirklich Variablen). So wie du das ja auch bei den anderen Feldern gemacht hast:

    typedef struct{
      char bezeichnung[100];  // JA!
      char spezialkost;       // Richtig!
      int zusatzstoffe[3];    // Auch!
      int centpreisStud;      // Toll!
      int centpreisBed;       // Juhu!
      char zusatz[20];        // Wunderbar!
    } Mensa_Essen;
    
    typedef struct{
      int tag;                // Immer noch richtig!
      ISO8601_JJJJMMTT datum; // Ich bin im Himmel!
      Mensa_Essen[4];         // Hallo? Jemand da? Was jetzt?
      } wochentag;
    

    Da du einen Typ Mensa_Essen hast, fehlt anscheinend der Feldname. Wie stellst du dir denn den Zugriff später vor?

    wochentag t;
    printf("Bezeichnung: %s\n", t.???[0].bezeichnung);
                                  ^^^ <- was steht hier?
    

    Das ist der Name, der da fehlt. Jetzt OK?



  • Ja, danke, das hat mir schon mal ein bisschen weiter geholfen. Ich habe das jetzt auch soweit geändert:

    #include <stdio.h>
    
    typedef int ISO8601_JJJJMMTT[3];
    /* Struktur für ein Mensa-Gericht */
    
    typedef struct{
      char bezeichnung[100]; /* Bezeichnung des Gerichts */
      char spezialkost; /* Max. eine Angabe (Buchstabe) für Spezialkost:
    'R', 'S', 'A', 'F', 'V' oder keine Angabe(' ') */
      int zusatzstoffe[3];/* Max. 3 Angaben (Zahlen) für Zusatzstoffe.
    0 bedeutet keine Angabe */
      int centpreisStud; /* Studierendenpreis in Euro-Cent */
      int centpreisBed; /* Bedienstetenpreis in Euro-Cent */
      char zusatz[20]; /* Sonst. Angaben, z.B. "Grill" oder "Wok" */
    } Mensa_Essen;
    
    typedef struct{
      int tag;
      ISO8601_JJJJMMTT datum[4];
      Mensa_Essen essen[4];
    } wochentag;
    
    int main()
    {
      wochentag day;
      		day[4] = {
        		       //Dienstag	
        		       {2,{2014,01,01},
      		 	{ "Gyros", 'S', {0,0,0}, 100, 280, ' ' },
                            { "Döner", 'R', {0,0,0}, 100, 280, ' ' },
                            { "Döner", 'G', {0,0,0}, 100, 280, ' ' },
                            { "Tofugeschnetzeltes", 'V', {0,0,0}, 100, 280, ' ' }}
    
                           //Mittwoch
                           {3, {2014,01,02},
                            { "Gyros", 'S', {0,0,0}, 100, 280, ' ' },
                            { "Döner", 'R', {0,0,0}, 100, 280, ' ' },
                            { "Döner", 'G', {0,0,0}, 100, 280, ' ' },
                            { "Tofugeschnetzeltes", 'V', {0,0,0}, 100, 280, ' ' }}
    
                           //Donnerstag
                           {4, {2014,01,03},
                            { "Gyros", 'S', {0,0,0}, 100, 280, ' ' },
                            { "Döner", 'R', {0,0,0}, 100, 280, ' ' },
                            { "Döner", 'G', {0,0,0}, 100, 280, ' ' },
                            { "Tofugeschnetzeltes", 'V', {0,0,0}, 100, 280, ' ' }}
    
                           //Freitag
                           {5, {2014,01,04},
                            { "Gyros", 'S', {0,0,0}, 100, 280, ' ' },
                            { "Döner", 'R', {0,0,0}, 100, 280, ' ' },
                            { "Döner", 'G', {0,0,0}, 100, 280, ' ' },
                            { "Tofugeschnetzeltes", 'V', {0,0,0}, 100, 280, ' ' }}
    
                          };
    
      int i,j, wochentag, zusatz;
      scanf("%i,%i", &wochentag, &zusatz);
      for(i=1; i<4; i++)
      {
        if(wochentag==day[i].tag && (zusatz==day.essen[i].zusatzstoffe[0] || zusatz==day.essen[i].zusatzstoffe[1] ||
                              zusatz== day.essen[i].zusatzstoffe[2]))
          printf("_______________\n %s (%c, %i, %i, %i)\n %i\n %i\n %s\n %i.%i.%i\n",
                 day.essen[i].bezeichnung,day.essen[i].spezialkost,day.essen[i].zusatzstoffe[0],
                 day.essen[i].zusatzstoffe[1], day.essen[i].zusatzstoffe[2],day.essen[i].centpreisStud,
                 day.essen[i].centpreisBed,day.essen[i].zusatz, day[i].datum[0], day[i].datum[1],
                 day[i].datum[2]);
      }
    return 0;
    }
    

    Doch hat das Programm jetzt Probleme mit der Struktur day, also die die ich selber erstellt habe. So wie ich es jetzt da stehen habe, hatte ich bisher die geringste Fehleranzahl. Ich hatte auch schon versucht einfach direkt

    wochentag day[4] = {...};
    

    zu benutzen, doch dann hatte der wieder mehr Fehler mit extra brace group at end of initializer und request for member 'essen' in something not a structure or union.

    Das hier sind die Fehlermeldungen zum obigen Code:

    quelltext.c: In function 'main':
    quelltext.c:26:8: error: subscripted value is neither array nor pointer nor vector
    quelltext.c:26:12: error: expected expression before '{' token
    quelltext.c:61:22: error: subscripted value is neither array nor pointer nor vector
    quelltext.c:66:64: error: subscripted value is neither array nor pointer nor vector
    quelltext.c:66:81: error: subscripted value is neither array nor pointer nor vector
    quelltext.c:67:17: error: subscripted value is neither array nor pointer nor vector



  • pepe90 schrieb:

    wochentag day;  // hier legst du eine Variable mit dem Namen day vom Typ wochentag an.
                      // Durch das ; ist die Anweisung damit abgeschlossen.
    
    // hier kommt jetzt die nächste Anweisung
            day[4] = { // Und hier versuchst du der Variable als Array etwas zu zuweisen.
    

    1. day ist kein Array
    2. Kann man Arrays nur bei der Definiton etwas mit dem Gleichheitszeichen zuweisen.

    ~Du musst das day; weglassen.~



  • So, nach ein bisschen rumgewurschtel bin ich jetzt schon mal ein bisschen weitergekommen. Jetzt habe ich nur noch ein paar Probleme mit der Ausgabe und der Abfrage, denn das kann so wohl noch nciht ganz funktionieren.

    #include <stdio.h>
    typedef int ISO8601_JJJJMMTT[3];
    /* Struktur für ein Mensa-Gericht */
    
    typedef struct{
      char bezeichnung[100]; /* Bezeichnung des Gerichts */
      char spezialkost; /* Max. eine Angabe (Buchstabe) für Spezialkost:
    'R', 'S', 'A', 'F', 'V' oder keine Angabe(' ') */
      int zusatzstoffe[3];/* Max. 3 Angaben (Zahlen) für Zusatzstoffe.
    0 bedeutet keine Angabe */
      int centpreisStud; /* Studierendenpreis in Euro-Cent */
      int centpreisBed; /* Bedienstetenpreis in Euro-Cent */
      char zusatz[20]; /* Sonst. Angaben, z.B. "Grill" oder "Wok" */
    } Mensa_Essen;
    
    typedef struct{
      int tag;
      ISO8601_JJJJMMTT datum[4];
      Mensa_Essen essen[4];
    } wochentag;
    int main()
    {
      wochentag day[]={{2,{2014,01,01},
      			{{ "Gyros", 'S', {0,0,0}, 100, 280, ' ' },
                            { "Döner", 'R', {0,0,0}, 100, 280, ' ' },
                            { "Döner", 'G', {0,0,0}, 100, 280, ' ' },
                            { "Tofugeschnetzeltes", 'V', {0,0,0}, 100, 280, ' ' }}},
                            {3, {2014,01,02},
                            {{ "Gyros", 'S', {0,0,0}, 100, 280, ' ' },
                            { "Döner", 'R', {0,0,0}, 100, 280, ' ' },
                            { "Döner", 'G', {0,0,0}, 100, 280, ' ' },
                            { "Tofugeschnetzeltes", 'V', {0,0,0}, 100, 280, ' ' }}},
                            {4, {2014,01,03},
                            {{ "Gyros", 'S', {0,0,0}, 100, 280, ' ' },
                            { "Döner", 'R', {0,0,0}, 100, 280, ' ' },
                            { "Döner", 'G', {0,0,0}, 100, 280, ' ' },
                            { "Tofugeschnetzeltes", 'V', {0,0,0}, 100, 280, ' ' }}},
                            {5, {2014,01,04},
                            {{ "Gyros", 'S', {0,0,0}, 100, 280, ' ' },
                            { "Döner", 'R', {0,0,0}, 100, 280, ' ' },
                            { "Döner", 'G', {0,0,0}, 100, 280, ' ' },
                            { "Tofugeschnetzeltes", 'V', {0,0,0}, 100, 280, ' ' }}}
                          };
    
      int i,j, wochentag, zusatz;
      scanf("%i,%i", &wochentag, &zusatz);
      for(i=0; i<4; i++)
      {
        if(wochentag==day[i].tag && (zusatz==day.essen[i].zusatzstoffe[0] ||
    				zusatz==day.essen[i].zusatzstoffe[1] ||
                              	zusatz== day.essen[i].zusatzstoffe[2]))
          printf("_______________\n %i\t %i.%i.%i\n %s (%c, %i, %i, %i)\n %i\n %i\n %s\n ",
                 day[i].tag, day[i].datum[0], day[i].datum[1], day[i].datum[2],
                 day.essen[i].bezeichnung, day.essen[i].spezialkost,
                 day.essen[i].zusatzstoffe[0], day.essen[i].zusatzstoffe[1],
                 day.essen[i].zusatzstoffe[2],day.essen[i].centpreisStud,
                 day.essen[i].centpreisBed,day.essen[i].zusatz);
      }
    return 0;
    }
    

    Ich verstehe nicht, warum hier etwas mit der Variable essen nicht stimmen soll.

    quelltext.c: In function 'main':
    quelltext.c:56:45: error: request for member 'essen' in something not a structure
    or union
    not a structure or union
    quelltext.c:57:16: error: request for member 'essen' in something not a structure
    or union
    not a structure or union
    quelltext.c:58:40: error: request for member 'essen' in something not a structure
    or union
    not a structure or union
    quelltext.c:61:17: error: request for member 'essen' in something not a structure
    or union
    not a structure or union
    quelltext.c:61:43: error: request for member 'essen' in something not a structure
    or union
    not a structure or union
    quelltext.c:62:17: error: request for member 'essen' in something not a structure
    or union
    not a structure or union
    quelltext.c:62:47: error: request for member 'essen' in something not a structure
    or union
    not a structure or union
    quelltext.c:63:17: error: request for member 'essen' in something not a structure
    or union
    not a structure or union
    quelltext.c:63:46: error: request for member 'essen' in something not a structure
    or union
    not a structure or union
    quelltext.c:64:17: error: request for member 'essen' in something not a structure
    or union
    not a structure or union
    quelltext.c:64:43: error: request for member 'essen' in something not a structure
    or union
    not a structure or union



  • day ist ein Array.

    if(wochentag==day[i].tag    &&    (zusatz==day.essen[i].zusatzstoffe[0] ||
                 Hier ^ nimmst du day als Array.  ^ Was ist hier?
    


  • Ja, aber da ist dann trotzdem das Problem, dass wenn ich nur i als Indeze nehme, dass ich nicht alles Zusatzstoffe von einem Gericht überprüfe, sondern immer eins von jedem Gericht und beim nächten die 2. Stelle.

    Und dann habe ich noch das Problem, dass die Struktur essen nicht erkennt.



  • Du bist da etwas mit deinen Indizes durcheinander.
    Du hast 4 Tage [i] und jeder Tag hat 4 Essen. Das kann nicht auch i sein. Sagen wir mal e
    Darum brauchst du zwei verschachtelte Schleifen.

    Und dann kommst du an die zusatzstoffe:

    day[i].essen[e].zusatzstoffe[2]
    


  • int i,j, wochentag, zusatz; 
      scanf("%i,%i", &wochentag, &zusatz); 
      for(i=0; i<4; i++) 
      { 
        if(day[i].tag==wochentag) 
        for(j=0; j<3; j++)
        {
          if(zusatz==day[i].essen[j].zusatzstoffe[0] || 
             zusatz==day[i].essen[j].zusatzstoffe[1] ||
             zusatz== day[i].essen[j].zusatzstoffe[2])
    

    Aber wenn ich das so abfragen würde, würde ich immer noch nicht, auf die richtigen Werte, bzw alle Werte zugreifen.
    Müsste ich dafür nicht zwei If-Abfragen erstellen? Eine um den tag zu erkennen und eine um die Zusatzstoffe eines Gerichtes zu vergleichen, oder?

    Hier zeigt mir der Compiler wiederrum auch noch an, dass hier der falsche Typ verwendet wird:

    printf("_______________\n %i\t %i.%i.%i\n %s (%c, %i, %i, %i)\n %i\n %i\n %s\n ", 
                 day[i].tag, day[i].datum[0], day[i].datum[1], day[i].datum[2], 
                 day[i].essen[j].bezeichnung, day[i].essen[j].spezialkost, 
                 day[i].essen[j].zusatzstoffe[0], day[i].essen[j].zusatzstoffe[1], 
                 day[i].essen[j].zusatzstoffe[2],day[i].essen[j].centpreisStud, 
                 day[i].essen[j].centpreisBed,day[i].essen[j].zusatz);
    

    quelltext.c: In function 'main':
    quelltext.c:6:14: warning: format '%i' expects argument of type 'int', but
    argument 3 has type 'int *' [-Wformat]
    s type 'int *' [-Wformat]
    quelltext.c:6:14: warning: format '%i' expects argument of type 'int', but
    argument 4 has type 'int *' [-Wformat]
    s type 'int *' [-Wformat]
    quelltext.c:6:14: warning: format '%i' expects argument of type 'int', but
    argument 5 has type 'int *' [-Wformat]
    s type 'int *' [-Wformat]



  • typedef int ISO8601_JJJJMMTT[3];  //das ist schon ein Array
    
    typedef struct{
      int tag;
      ISO8601_JJJJMMTT datum[4];   // und hier machst du nochmal ein Array daraus
    ...
    

    dann hast du eien Array von eienm Array. Also musst du da auch zweimal die Klammern nehmen.

    day[i].datum[x][1]
    

    Welchen Wert das x haben muss, ob das sinnvoll ist und ob du dieses Array brauchst, musst du wissen.



  • So, das ikst jetzt mein lertzte Version von meinem Programm. Es bestehen keine Fehlermeldungen, aber es wird auch nichts ausgegeben.

    Das Programm soll nun folgendes erfüllen:
    Es soll der Tag eingegeben werden und ein Zusatzstoff, der nicht in dem Gericht vorkommen soll, deswegen die != . Ich kann den Tag vergleichen, da gibt mir das Programm dann auch die Gerichte für den Richtigen Tag aus, aber der vergleicht die Zusatzstoffe nicht 😕

    #include <stdio.h> 
    typedef int ISO8601_JJJJMMTT[3]; 
    /* Struktur für ein Mensa-Gericht */ 
    
    typedef struct{ 
      char bezeichnung[100]; /* Bezeichnung des Gerichts */ 
      char spezialkost; /* Max. eine Angabe (Buchstabe) für Spezialkost: 
    'R', 'S', 'A', 'F', 'V' oder keine Angabe(' ') */ 
      int zusatzstoffe[3];/* Max. 3 Angaben (Zahlen) für Zusatzstoffe. 
    0 bedeutet keine Angabe */ 
      int centpreisStud; /* Studierendenpreis in Euro-Cent */ 
      int centpreisBed; /* Bedienstetenpreis in Euro-Cent */ 
      char zusatz[20]; /* Sonst. Angaben, z.B. "Grill" oder "Wok" */ 
    } Mensa_Essen; 
    
    typedef struct{ 
      int tag; 
      ISO8601_JJJJMMTT datum; 
      Mensa_Essen essen[4]; 
    } wochentag; 
    int main() 
    { 
      wochentag day[]={{2,{2014,01,14}, 
          {{"Geflügelfrikadelle in Rahmsauce", '0', {3,11,12}, 100, 280, ' '}, 
          {"Falafel, ägyptisch in Kräuterquark-Dip", 'F', {12,0,0}, 120, 270, ' '}, 
          {"Grünkohleintopf mit Weizenbrötchen", 'V', {2,3,11}, 110, 240, ' '}, 
          {"Rinderhüftsteak Cafè de paris mit Kroketten", 'S', {4,11,12}, 545, 685, ' '}}}, 
    
      {3, {2014,01,15}, 
          {{"Rheinischer Sauerbraten in Rosinensauce",'R',{11,18,0}, 100, 280, ' ' }, 
          {"Gebratener Reis mit Linsen und Gemüse", 'V', {1,11,12}, 120, 270, ' ' }, 
          {"Serbischer Bohneneintopf mit Weizenbrötchen", 'V', {2,3,11,}, 110, 240, ' '}, 
          {"Kotelett Sauce diabolo Rosmarinkartoffeln", 'S', {2,11,0},345, 485, ' ' }}}, 
    
      {4, {2014,01,16}, 
          {{"Paprikaschote Hackfleischfüllung Tomaten-Basilikum-Sauce", 'S', {3,6,11}, 100,
           280, ' ' }, 
          {"Käsespätzle,überbacken", 'F', {1,3,11}, 120, 270, ' ' }, 
          {"Pfälzer Kartoffeleintopf Weizenbrötchen", 'F', {2,3,11}, 110, 240, ' ' }, 
          {"Putenbruststeak Pfefferrahmsauce Kroketten",' ', {3,11,12}, 375, 515, ' ' }}}, 
    
      {5, {2014,01,17}, 
          {{"Seelachsfilet in Sesamkruste Dillrahmsauce", ' ', {3,11,12}, 120, 310, ' ' }, 
          {"Kartoffel Cordon bleu mit Frischkäse-Kräuter-Füllung Paprikarahmsauce",'F',
          {6,11,12}, 120, 270, ' ' }, 
          {"Graupeneintopf Weizenbrötchen ", 'V', {2,3,11}, 110, 240, ' ' }, 
          {" ", ' ', {0,0,0}, 0, 0, ' ' }}} 
      }; 
    
      int i,j, wochentag, zusatz; 
      scanf("%i,%i", &wochentag, &zusatz); 
      for(i=0; i<4; i++) 
      { 
        if(day[i].tag==wochentag) 
        for(j=0; j<4; j++)
        {
          if(zusatz!=day[i].essen[j].zusatzstoffe[0] || 
             zusatz!=day[i].essen[j].zusatzstoffe[1] ||
             zusatz!= day[i].essen[j].zusatzstoffe[2])
    
          printf("_______________\n %i\t %i.%i.%i\n %s (%c, %i, %i, %i)\n %i\n %i\n %s\n ", 
             day[i].tag, day[i].datum[0], day[i].datum[1], day[i].datum[2], 
             day[i].essen[j].bezeichnung, day[i].essen[j].spezialkost, 
             day[i].essen[j].zusatzstoffe[0], day[i].essen[j].zusatzstoffe[1], 
             day[i].essen[j].zusatzstoffe[2],day[i].essen[j].centpreisStud, 
             day[i].essen[j].centpreisBed,day[i].essen[j].zusatz);
        }
      } 
    return 0; 
    }
    

    Habe den Vergleich auch mal so aufgestellt, aber das ergab nur das gleiche Ergebnis.

    int i,j, wochentag, zusatz; 
      scanf("%i,%i", &wochentag, &zusatz); 
      for(i=0; i<4; i++) 
      { 
        for(j=0; j<4; j++)
        {
          if(day[i].tag==wochentag && (zusatz!=day[i].essen[j].zusatzstoffe[0] || 
             zusatz!=day[i].essen[j].zusatzstoffe[1] ||
             zusatz!= day[i].essen[j].zusatzstoffe[2]))
    


  • Lass dir doch mal nach der Eingabe von wochentag und zusatz diese wieder ausgeben.

    Und schau dir die Definition von denen noch mal an (welcher Typ). Passt das zu dem Formatspecifier und zu deiner Eingabe?



  • Okay, da finde ich den Fehler, denn für

    int zusatz
    

    nimmt er einen anderen Wert an, als der den ich eingebe, obwohl das eine normale int-Variable ist. 😕 😕 😕

    ok, ich habe zusatz umbenannt zu zusatz2, da ich gesehen habe, dass ich zusatz ja schon in der Mensa-Struktur habe.

    Komischerweise wird mir für den 2. Eingabewert auch etwas ausgegeben, wenn ich nur einen Wert eingebe. 😕


Anmelden zum Antworten