Problem bei Aufgabe mit Datenstrukturen
-
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.
-
pepe90 schrieb:
ok, ich habe zusatz umbenannt zu zusatz2, da ich gesehen habe, dass ich zusatz ja schon in der Mensa-Struktur habe.
Die können denselben Namen haben. Das eine ist ja eine eigene Variable, das andere ein Member einer struct.
Schau dir nochmal den Typ von zusatz in der struct an. Welcher ist das und welchen Inhalt hast du dem zugewiesen?
Und welche Eingabe hast du für zusatz2 gemacht?Oder meinst du etwas zusatzstoffe aus der struct?
-
DirkB schrieb:
Oder meinst du etwas zusatzstoffe aus der struct?
genau die meine ich. Und die ist ja auch eine int. Lustigerweise bekomme ich egal ob ich etwas eingebe oder nicht für zusatz2 32767 ausgegeben. Also, wenn ich die direkt nach der Eingabe ausgebe.
-
pepe90 schrieb:
genau die meine ich.
Ok. Mein Fehler.
pepe90 schrieb:
Lustigerweise bekomme ich egal ob ich etwas eingebe oder nicht für zusatz2 32767 ausgegeben. Also, wenn ich die direkt nach der Eingabe ausgebe.
Machst du die Eingabe auch mit Komma zwischen den Werten?
-
Hatte ich nicht gemacht. Hab es ausprobiert und das war der Fehler dafür. Aber der Vergleich von zusatz2 und zusatzstoffe[] klappt nicht, obwohl es syntaktisch richtig sein sollte. Meinem Verständniss nach.
-
OMG. Ich habs. Der Vergleich ist insofern falsch, als das ist die Vergleiche nicht mit oder sondern mit und vergleichen muss. Denn der eingegebene Stoff soll ja an allen 3 Stellen nicht vorhanden sein.
DirkB und Bashar ich bin euch sehr dankbar.
-
guten tag leute!
ich habe eine ähnliche aufgabe aufbekommen. und ich hab da ein paar kleine probleme.
und zwar beim datenfeld. beir der initialisation siehts bei mir folgend aus:
_
**int main (void) {Mensa_Essen Mein_Mensa_Tag =
{0,"Döner",'R',{2,9,12,19},1,100, 280, 290},
{1,"Salat",'F',{3,19,20,21,15},1,120,250,250},
{2,"Weizenbrötchen",'V',{20,22},1,110, 340, 340},
{3,"Bratwurst",'S',{1,2,3,12,19},1,300, 300, 300},
{4,"Eintopf",'0',{0,0,0},0,75,90,90};**_
es kommt die eine fehlermeldung-
error: expected identifier or '(' before '{' tokenich komm wegen dieser einfach nicht weiter. kann mir hemand helfen?
-
Du willst wohl ein array.
-
Nathan schrieb:
Du willst wohl ein array.
genau. das soll ein array sein.
ich dachte zunächst, dass ich zu wenig geschweifte klammer hab, klappt aber trotzdem nicht.
-
du hast vor allem zu wenig eckige klammern ...
-
also im ganzem sieht es so aus
**#include <stdio.h>
/*ISO-Normdatum aus 3 Zahlen: Jahr, Monat, Tag*/
typedef int ISO8601_JJJJMMTT[3];/* Angebotskategorien des Mensa-Speiseplans */
char Angebot[][50] =
{
"1" //,
"2" //,
"3" //,
"4" //,
"5" /**/};/* Struktur für ein Mensa-Gericht /
typedef struct {
int angebot_nr; / Nummer der Angebotskategorie /
char bezeichnung[100]; / Bezeichnung des Gerichts, z.B. "Obstbecher */
/* Max. eine Angabe (Buchstabe) für die Kennzeichnung:
'R', 'S', 'A', 'F', 'V' oder keine Angabe(' ') /
char kennzeichnung; / z.B. 'F' für fleischlos */
/* Max. 20 Angaben (Zahlen) für Zusatzstoffe. 0 bedeutet keine Angabe /
int zusatzstoffe[20]; / alle nicht belegten Elemente müssen 0 sein! /
int enthaelt_allergene; / 0 = keine Allergene, 1= enthält Allergene /
int centpreisStud; / Studierendenpreis in Euro-Cent /
int centpreisBed; / Bedienstetenpreis in Euro-Cent /
int centpreisGast; / Preis für Gäste in Euro-Cent */
} Mensa_Essen;
/* Ende der Variablen-Definitionen */int main (void) {
Mensa_Essen Mein_Mensa_Tag =
{0,"Döner",'R',{2,9,12,19},1,100, 280, 290},
{1,"Salat",'F',{3,19,20,21,15},1,120,250,250},
{2,"Weizenbrötchen",'V',{20,22},1,110, 340, 340},
{3,"Bratwurst",'S',{1,2,3,12,19},1,300, 300, 300},
{4,"Eintopf",'0',{0,0,0},0,75,90,90};ISO8601_JJJJMMTT wochentag =
{ 2014, 01, 22 };printf("Ausgabe eines Gerichts:\n\"%s / %s\" am %i.%i.%i\nenthält %sAllergene!\n",
Angebot[Mein_Mensa_Tag.angebot_nr],
Mein_Mensa_Tag.bezeichnung,
wochentag[2], wochentag[1], wochentag[0],
(Mein_Mensa_Tag.enthaelt_allergene)==0 ? "keine " : "" );return 0;
}**verstehe nicht,warum da diese fehlermeldung trotzdem kommt?
expected identifier or '(' before '{' token
-
Troll.
-
???
ich bin halt n anfänger
-
rinato schrieb:
verstehe nicht,warum da diese fehlermeldung trotzdem kommt
Weil du ein Nicht-Array als Array initialisieren willst.
Mensa_Essen vom Typ ein Array,
Mein_Mensa_Tag ist auch kein Array. (Wie definiert man Arrays?)Statt auf das fette B klicke mal liefer auf das feine C unter dem
.
Dann bleibt der Code auch formatiert.