kleines Problem beim Speichern....
-
Moin Gemeinde,
Schaut euch mal bitte anliegenden Quellcode an. Das Problem besteht darin, das ich sobald ich einen Datensatz einpflegen möchte, ich sofort eine absturzmeldung erhalte.Hilfe ( Bitte so das ich das auch verstehe
)
#include <stdio.h> #include <stdlib.h> #include <iostream.h> #include <conio.h> #include <string.h> class Artikel { public: char Artikelname[30]; float Einzelpreis; long Artikelnummer; int MWS; virtual void put()=0; // virtual = Bindung an die Funktion zur Laufzeit (aktuelle Klasse) virtual void get()=0; // =0 bewirkt Personenklasse wird zur abstrakten Klasse / Artikel * next; // Von Person-Klasse kann kein Objekt erzeugt werden }; class Lebensmittel:public Artikel { public: void put(); void get(); }; class Andere:public Artikel { public: void put(); void get(); }; void Artikel::get() { printf("Bitte geben Sie die Artikelnummer ein:\n"); fflush (stdin); scanf("%li", & Artikelnummer); printf("Bitte geben Sie den Artikelnamen ein:\n"); fflush (stdin); scanf("%s", & Artikelname); printf("Bitte geben Sie den Einzelpreis ein:\n"); fflush (stdin); scanf("%f", &Einzelpreis); } void Lebensmittel::get() { Artikel::get(); } void Andere::get() { Artikel::get(); } void Artikel::put() { printf("Artikelnummer:\t\t %li\n",Artikelnummer); printf("Artikelname:\t\t %s\n",Artikelname); printf("Einzelpreis:\t\t %.2f EURO\n",Einzelpreis); } void Lebensmittel::put() { Artikel::put(); MWS=7; printf("Mehrwertsteuersatz:\t %i Prozent\n\n",MWS); } void Andere::put() { Artikel::put(); MWS=16; printf("Mehrwertsteuersatz:\t %i Prozent\n\n",MWS); } main (void) { int auswahl; Artikel *head; Artikel *neu; Artikel *aktuell; head = NULL; neu = NULL; aktuell = NULL; char weiter='j'; while (weiter=='j') // Schleife zum Zurückspringen ins Menü { printf("Auswahlmenue\n"); printf("1. Lebensmittel aufnehmen!\n"); printf("2. Andere aufnehmen!\n"); printf("3. Ende!\n"); printf("Bitte treffen Sie Ihre Auswahl!\n"); fflush(stdin); scanf("%i", &auswahl); if (auswahl == 3) { weiter = 'n'; system ("cls"); printf("Das Programm wird beendet!\n"); break; } if (head !=NULL) { while (aktuell = aktuell->next) { aktuell = aktuell->next; } switch(auswahl) { case 1: neu = new Lebensmittel; break; case 2: neu = new Andere; break; } aktuell->next = neu; aktuell = aktuell->next; aktuell->next = NULL; } else { switch (auswahl) { case 1: neu = new Lebensmittel; break; case 2: neu = new Andere; break; } neu->get(); //fprintf(pf,"%li %s %.2f \n",Waren->Artikelnummer ,Waren->Artikelname,Waren->Einzelpreis); head = neu; aktuell = head; aktuell->next = NULL; } aktuell = head; do { aktuell = aktuell->next; } while (aktuell !=NULL); aktuell = head; getch(); } return(0); } /* case 1: { Artikel*Waren[10]; FILE *pf; // Zeiger auf Datei Waren[0]=new Lebensmittel; pf=fopen("Waren.dat","w"); // Erstellt / Öffnet die Datei zum Schreiben Waren[0]->get(); printf("\n"); Waren[0]->put(); fprintf(pf,"%li %s %.2f \n",Waren[0]->Artikelnummer ,Waren[0]->Artikelname,Waren[0]->Einzelpreis); fclose (pf); // Datei wird geschlossen } break; case 2: { pf=fopen("kunde.dat","r"); // Öffnet die Datei zum Lesen int p=0; int i=0; while (!feof(pf)) // Liest die Datensätze der Datei aus { fscanf(pf,"%li %s %f",&Waren[i]->Artikelnummer,&Waren[i]->Artikelname,&Waren[i]->Einzelpreis); p++; // Zähler } printf(" Die Datenbank enthaelt folgende Datensaetze!\n\n"); for (i=0; i<p-1;i++) // p-1 = Letzter Datensatz wird nicht mit angezeigt { Waren[i]->put(); } fclose (pf); // Datei wird geschlossen } break; case 3: { Waren[1]=new Andere; pf=fopen("Waren.dat","a"); // Öffnet die Datei zum erweitern / anhängen Waren[1]->get(); printf("\n"); Waren[1]->put(); fprintf(pf,"%li %s %.2f \n",Waren[1]->Artikelnummer ,Waren[1]->Artikelname,Waren[1]->Einzelpreis); fclose (pf); } break; case 4: { weiter='n'; // Schleife wird beendet printf(" Das Programm wird beendet!\n"); break; } */
-
Hallo,
an dieser Stelle stürzt dein Programm ab:
aktuell->next = neu; // <-- aktuell = aktuell->next; aktuell->next = NULL;
Aber du musst schon selber überlegen, wieso/weshalb/warum..
Ich habe keine Zeit mich mit dem gesamten Code zu beschäftigen.
Falls du konkrete Fragen hast (z.B. wie fordere ich Speicher an?), dann wird dir hier auch geholfen, sonst nichtMfG
-
Da überlege und bastel ich schon seit Montag dran.....
-
Hallo,
Dann versuch doch mal zu erklären was der Codeteil (bei Edi) machen soll. Wo z.Bsp. vereinbarst du Speicher für aktuell?
Dann schau dir das hierwhile (aktuell = aktuell->next) { aktuell = aktuell->next; }
noch mal genauer an.
Na ja, schau dir deinen ganzen Code noch mal genauer an. Versuche z.Bsp. mal Quelltextteile zu kommentieren, was sie genau machen sollen.
Vielleicht wären Ctor etc. für deine Klassen auch ganz sinnvoll.Ciao