Frage zu Datenstruckturen
-
Hallo die Aufgabenstellung lautet:
A1:
a)
Legen Sie eine Struktur namens Bauteil zur Verwaltung elektronischer Bauteile an. Zu jedem Bauteil sollen der Bauteilname, Lieferant, Preis und die Stückzahl gespeichert werden.b)Definieren Sie eine Funktion void ausgabe(Bauteil* b) zur Ausgabe der Bauteil-Information in der Form:
Bauteil Lieferant Preis Anzahl
Xyz TI 0,35 5000
Bauteil und Lieferant sollen dabei linksbündig, preis und Anzahl rechtsbündig ausgegeben werden. Der Preis soll mit drei Nachkommastellen ausgegeben werden, wobei sich die Dezimalpunkte untereinander befinden.
Dieser Teil ist mir gelungen :).
Jetzt zu dem Teil der Mir Probleme macht, da ich nicht weiß ob das sinnig ist wie ich das mache. Außerdem ist die ausgabe nicht wie gewünscht.
A2:
Definieren Sie eine Funktion Bauteil* eingabe() zur Eingabe eines neuen Bauteils über die Tastatur. Für jedes bauteil soll dynamisch speicher angelegt werden. Rückgabewert soll ein zeiger auf den neu angelegten Speicher sein.Der folgende Quellcode enthält A1 und ich habe versucht es so zu erweitern wie in A2 beschreiben.
#include <stdio.h> #include <string.h> #include <iostream> #include <iomanip> using namespace std; void ausgabe(struct BAUTEIL *b); struct BAUTEIL { char bauteil[20]; char lieferant[20]; float preis; int anzahl; }; struct BAUTEIL* eingabe(); main() { struct BAUTEIL teil1,*p; p=&teil1; strcpy(teil1.bauteil,"dioden"); strcpy(teil1.lieferant,"siemens"); teil1.preis=0.0525; teil1.anzahl=5000; cout << setw(12) << left << "bauteilname" << setw(12) <<left <<"lieferant" << setw(12) << left <<"preis" << setw(12)<< left <<"anzahl" << endl; ausgabe(p);//Zu A1 ausgabe(eingabe()); //das ist quasie schon für den Aufgabenteil2 } void ausgabe(struct BAUTEIL *b) { cout << setw(12) << left << b->bauteil << setw(12) << left << b->lieferant << setw(6) << setprecision(3) << fixed << right << b->preis << setw(12)<< right << b->anzahl << endl; } struct BAUTEIL* eingabe() { struct BAUTEIL *bauteilneu,teil2; bauteilneu= (struct BAUTEIL*)malloc(sizeof(struct BAUTEIL)); strcpy(teil2.bauteil,"test"); strcpy(teil2.lieferant,"test"); teil2.preis=33; teil2.anzahl=44; bauteilneu=&teil2; return bauteilneu; }
Problem ist jetzt das bei der ausgabe dieser Zeile "ausgabe(eingabe());" teilweise komische zeichen ausgegeben werden :S.
Wäre schön wenn mir jemand helfen könnte. Bitte auch um verbesserungsvorschläge :).
Achja später soll das resultat aus A2 in eine verkettete liste umgeschreiben werden. Ist jetzt aber noch nicht wichtig.
Gruß newcomer90
-
1. Was hat das mit Linux zu tun? Das gehört in eines der normalen Sprachunterforen. Die Frage ist nur welches:
2. Soll das C sein? Falls ja ist das ein grauenhafter Mischmasch mit C++. Gewöhn dir das schnellstens ab und lerne wo die Unterschiede zwischen den Sprachen sind.
3. Soll das C++ sein? Falls ja ist das ein grauenhafter Mischmasch mit C. Gewöhn dir das schnellstens ab und lerne wo die Unterschiede zwischen den Sprachen sind.
-
Du legst dynamischen Speicher an und weist den Zeiger darauf auf dem Zeiger bauteilneu zu. Dann füllst Du eine andere Struktur, die lokal angelegt wurde und verbiegst den Zeiger, auf diese Struktur. Damit hast Du keinen Zeiger mehr auf den dynamisch angelegten Speicher, wohl aber auf die lokale Struktur. Wenn die Funktion verlassen wird, wird diese Struktur verworfen, wohl aber ein Zeiger auf diesen jetzt freigegebenen Speicher zurück geliefert.
Aber wie der Vorposter bereits gesagt hat. Das hat nichts mit Linux/Unix zu tun und ist kein C und nicht so richtig C++.
-
Aufgrund der genannten Prototypvorgaben tippe ich mal, dass es C werden soll.
newcomer90 schrieb:
Dieser Teil ist mir gelungen :).
... Außerdem ist die ausgabe nicht wie gewünscht.
Ja was denn nun?
Ich sehe keine Funktionalität zur geforderten Eingabe der Strukturelementwerte.
Die brauchst du aber in "eingabe".
Hast du mal was dazu nachgelesen oder vielleicht im Unterricht aufgepasst?newcomer90 schrieb:
Achja später soll das resultat aus A2 in eine verkettete liste umgeschreiben werden. Ist jetzt aber noch nicht wichtig.
Doch das ist wichtig, man kann daran sofort das Niveau deines Aufgabenstellers hinsichtlich praxisferner Theorie ablesen.