Programm um mehrer strutcs einzulesen.
-
Hallo,
ich will eine bestimmte Anzahl von Structs einlesen. Dazu habe ich folgendes Programm geschrieben. Leider funktioniert da im Moment noch garnichts.
Wo könnten sich die Fehler verstecken?#include <iostream> #include <string> using namespace std; struct ListElem {char *Name; int *Prio; struct ListElem *next;}; struct ListElem *ListElemarr[]; int main() { for(int i=1; i<=2; i++) { char helpName; unsigned int helpPrio; struct ListElem *ListElemarr[i]; ListElemarr[i] = new ListElem; cout << "Bitte einen Namen eingeben: " << endl; cin >> helpName; ListElemarr[i]->Name = new char(strlen(helpName)); strcyp(ListElemarr[i]->Name, helpName); cout << "Geben sie eine Prioritaet an: " << endl; cin >> helpPrio; ListElemarr[i]->Prio = helpPrio; //Abfrage ob Null Verkettet werden soll oder das nächste Element if (i=0) { ListElemarr[i]->next = NULL} else { ListElemarr[i]->next = ListElemarr[i-1];} } cin.get(); return 0; }Viele grüße
Andreas
-
Inwie fern läuft da nichts? Kompiliert es nicht? Wenn Nein, dann bitte Fehlermeldung.Drück dich bitter ein wenig genauer aus.
Hast du es schon mal mit dem Debugger versucht? Ist ja ein kleines Programm da geht es noch recht gut alles bis in Detail damit anzuschauen..Also ich sehe da schon ein paar Sachen.
Also die Schaufe macht man normalerweise so: for (int i = 0; i < 2;i++)...
Ist aber nicht so tragisch, wie dus machst.. Nur ein bisschen komisch.
Was aber tragisch ist, ist, dass du den angeforderten Speicher nicht mehr aufräumst (keine delete's zu den new's).
-
Sorry ich wollte eigentlich die Fehlerausgabe mit anhängen.
Über das aufräumen mittels delete hab ich leider keine Ahnung. Wir haben im Moment nur mit C Programmiert und sind gerade auf C++ umgestiegen. Eine Aufgabe war unter anderem die "malloc()" (aus einem anderen Programm) anweisungen mit "new" zu ersetzen. Ich hab mir das über die Hilfedateien so zusammen gereimt, und jetzt in dieses Projekt übernommen. Das obere Programm ist jetzt mein erstes das ich rein in C++ programmieren muss.c:\dokumente und einstellungen\ruebe\eigene dateien\visual studio 2008\projects\uebungs2\uebungs2\uestrukt2.cpp(15) : error C2057: Konstanter Ausdruck erwartet c:\dokumente und einstellungen\ruebe\eigene dateien\visual studio 2008\projects\uebungs2\uebungs2\uestrukt2.cpp(15) : error C2466: Zuordnung eines Arrays der konstanten Größe 0 nicht möglich. c:\dokumente und einstellungen\ruebe\eigene dateien\visual studio 2008\projects\uebungs2\uebungs2\uestrukt2.cpp(15) : error C2133: 'ListElemarr': Unbekannte Größe c:\dokumente und einstellungen\ruebe\eigene dateien\visual studio 2008\projects\uebungs2\uebungs2\uestrukt2.cpp(19) : error C2664: 'strlen': Konvertierung des Parameters 1 von 'char' in 'const char *' nicht möglich Die Konvertierung eines ganzzahligen Typs in einen Zeigertyp erfordert ein reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat
-
Also du hast noch sehr viele Probleme..;)
Ich weiss nicht recht, wo anfangen.. Darum einfach mal ein wenig geändert.

Wenn du schon string includest, darfst du die auch benutzen.

#include <iostream> #include <string> using namespace std; struct ListElem { std::string Name; int Prio; //Warum hast du hier einen Zeiger auf int gehabt?! ListElem *next; }; ListElem ListElemarr[2]; // Das struct musst du in C++ nicht merh angeben int main() { for(int i(0); i<2; i++) { cout << "Bitte einen Namen eingeben: " << endl; cin >> ListElemarr[i].Name; //Du kannst die Elemente auch direkt einlesen.. cout << "Geben sie eine Prioritaet an: " << endl; cin >> ListElemarr[i].Prio; if(i) ListElemarr[i-1].next = &ListElemarr[i]; } cin.get(); return 0; }Im grossen und ganzen ist das keine gute Liste. Das ist jetzt nur für dich, um ein bisschen zu schauen..
-
Schon mal vielen Dank.
Ich schau mal wie ich das verwenden kann.Warum verwendest du :
std::string Name;Ich befinde mich doch an dieser Stelle im namespace std oder verstehe ich da was falsch?
-
Ja, bräuchte es eigentlich nicht. Ist Gewohnheit. Solltest dir auch gleich angewöhnen das so zu schreiben.