• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Meine Programmierhausaufgabe [ in C ]

Rudolf

Newbie
Hallo,

Habe da Schwierigkeiten mit folgender Aufgabe:

Aufgabenstellung: "Für eine kleine Marktuntersuchung sollen Sie ein Programm schreiben mit dem bis zu 100 verschiedene Produktangebote mit ihrem Namen, dem Preis und dem Testergebnis in einem Datenfeld gespeichert werden können.

Es wird folgende Typvereinbarung getroffen:

enum bewertung {ausgezeichnet, gut, befriedigend, mangelhaft};
struct produktfeld {
char produktname[20];
float preis;
bewertung testergebnis;
};


a.)Schreiben sie ein C-Programm mit dem Werte für verschiedene Produkte in das Datenfeld eingetragen werden können. Bitte beachten Sie, dass Sie nicht die Bezeichner des Enumeration-Types eingeben können, sondern bei der Eingabe mit einem kleinen Menü und Zahlenwerten arbeiten müssen. "

-------------

Ich als Laie würde das noch irgendwie hinkriegen. Jedoch der vorgegebene Punkt mit der Bewertung macht mir zu schaffen. Ich hätte hierfür einfach eine Funktion mit der Bewertung als Rückgabewert geschrieben. - Die Zeile: <<< bewertung testergebnis; >>> verstehe ich absolut nicht.

Habe nur folgenden Ansatz anzubieten.

#include <stdio.h>

#define ANZWAREN 3

enum bewertung {ausgezeichnet, gut, befriedigend, mangelhaft};

struct produktfeld {
char produktname[20];
float preis;
bewertung testergebnis;
};


main() {

int x;

struct produktfeld waren[ANZWAREN];

for(x=0; x<ANZWAREN; x++) {
printf("\n\n%i. Ware\n",x+1);
printf("\nProduktname: ");
scanf("%s", waren[x].produktname);
printf("\nPreis : ");
scanf("%f", &waren[x].preis);
printf("\nBewertung :");
scanf("%c", waren[x].testergebnis.bewertung);
}

for(x=0; x<ANZWAREN; x++){
printf("\n\n%i. Ware\n",x+1);
printf("\nProduktname : %s ",waren[x].produktname);
printf("\nPreis : %f ",waren[x].preis);
printf("\nBewertung : %s ",waren[x].bewertung.testergebnis);

}

}

--------------

Wäre cool, wenn sich das jemand anschauen könnte.

Grüße
 

andreasw

Member
Code:
bewertung testergebnis;

Bedeutet, dass eine Variable vom Typ bewertung deklariert wird.

Dir scheint anscheinend nicht so ganz klar zu sein, wie ein enum funktioniert.

Ein Enum kann einen, der bei der Definition des enums angegebenen, Wert annehmen.

In dem Fall wären das

+ausgezeichnet
+gut
+befriedigend
+mangelhaft

Diesen Werten sind Zahlenwerte zugeordnet. ausgezeichnet = 0, gut = 1 usw.

Wenn du nun den Wert eines enums setzen willst, kannst du entweder den Wert direkt angeben z. B. testergebnis=ausgezeichnet

Wichtig ist hier, dass es eben nicht in Anführungszeichen steht.

Oder du sagst testergebnis=0

Beide Anweisungen sind gleichbedeutend.

In der Aufgabenstellung war es gedacht, dass du eine Art Menü ausgibst, wo dann beispielsweise steht:

Wählen sie die Bewertung:
0 für Ausgezeichnet
1 für gut
....

dann gibt der User die Zahl ein und du kannst das testergebnis festlegen.

mfg

Andy
 
OP
R

Rudolf

Newbie
andreasw schrieb:
+ausgezeichnet
+gut
+befriedigend
+mangelhaft

Diesen Werten sind Zahlenwerte zugeordnet. ausgezeichnet = 0, gut = 1 usw.


testergebnis=ausgezeichnet

Oder du sagst testergebnis=0

Beide Anweisungen sind gleichbedeutend.

Wählen sie die Bewertung:
0 für Ausgezeichnet
1 für gut
....

dann gibt der User die Zahl ein und du kannst das testergebnis festlegen.

So habe ich das auch verstanden. Bei mir gibt er aber immer nur die schrecklichsten Fehlermeldungen raus, egal was ich probiere.

Schon bei

Code:
bewertung testergebnis;

meint er, es sei nicht korrekt deklariert.
-----------

Ich möchte zum Beispiel der ersten Ware die Bewertung "ausgezeichnet" geben und diese abspeichern, tue ich das nach meinem Verständnis in der Form:

scanf("%i",&ware[0].testergebnis); /*Tippe 0 ein*/

und gebe mit

printf("%s",ware[0].bewertung);

wieder aus.

Grüße
 

andreasw

Member
Hi,

da habe ich etwas übersehen.

Das muss

Code:
enum bewertung testergebnis

sein, sonst ist es falsch.

Oder du musst vorher einen typdef machen.

mfg

Andy
 
OP
R

Rudolf

Newbie
Hallo Andreas,

Besten Dank für dein Mühe.
Wahrscheinlich sollte hier die Anwendung von typdef beabsichtigt sein, nur ich sehe so etwas halt nicht. Wo es zur Sprache kam, muss ich wohl gefehlt haben 8)

grüße
rudolf
 
OP
R

Rudolf

Newbie
Rudolf schrieb:
Wahrscheinlich sollte hier die Anwendung von typdef beabsichtigt sein

Nee, macht doch keinen Sinn. Aber wie gesagt, ich habe nicht viel Ahnung.

Hier meine Endfassung. -Ich kapituliere. Es läuft nicht und in der Zeit schaffe ich es nicht mehr.
Es braucht nicht korrigiert zu werden.
-----------

#include <stdio.h>

#define ANZWAREN 3

enum bewertung {ausgezeichnet, gut, befriedigend, mangelhaft};

struct produktfeld {
char produktname[20];
float preis;
enum bewertung testergebnis;
};


main() {

int x;

struct produktfeld waren[ANZWAREN];

for(x=0; x<ANZWAREN; x++) {
printf("\n\n%i. Ware\n",x+1);
printf("\nProduktname: ");
scanf("%s", waren[x].produktname);
printf("\nPreis : ");
scanf("%f", &waren[x].preis);
printf("\nBewertung :");
scanf("%i", &waren[x].testergebnis);
}

for(x=0; x<ANZWAREN; x++){
printf("\n\n%i. Ware\n",x+1);
printf("\nProduktname : %s ",waren[x].produktname);
printf("\nPreis : %f ",waren[x].preis);
printf("\nBewertung : %s ",waren[x].testergebnis);

}

}
 

andreasw

Member
Hi,

Enums sind keine Strings :), deshalb darfst du die nicht als solche ausgeben, du erhältst dort wahrscheinlich einen Fehler.

Du musst mit Switch in etwa folgendes machen:

Code:
printf("\nBewertung : ");
switch(waren[x].testergebnis)
{
case ausgezeichnet:
printf("ausgezeichnet");
break;
case gut:
printf("gut");
break;
.
.
.
}
Diese Stelle müsstest du dann ganz am Ende anstatt der letzten printf-Anweisung einbauen.

Mit Typedef würde das im übrigen so aussehen:

Code:
typedef enum {ausgezeichnet, .....}bewertung;

...

bewertung testergebnis;

mfg

Andy
 
OP
R

Rudolf

Newbie
hallo andreas,

nochmals danke. Jetzt habe ich für heute Abend doch noch etwas, wo dran ich arbeiten kann. :)

So ähnlich mit switch steht es auch bei mir im Handbuch, jedoch nur in einem sinnentstellten Beispiel.

Grüße
 
Oben