Übung zum binärem Schreiben
-
Oder habt ihr gerade verkettete Listen im Plan?
-
Nein, sowas haben wir nocht nicht gelernt.
Nochmal die Aufgabenstellung:
-
Hab was vergessen:
* Kurzbeschreibung : Programm zum Ueben von dynamischer Speicherverwaltung, binaeren FileIO.
* Implementierung zum Test von malloc free
* Ueben von modularem Programmieren und ueben von Strukturen mit Pointern.
-
Ja und jetzt muss ich halt die ganzen Termine im binär file auslesen mit fread und so bzw. dann halt malloc verwenden, aber nur wie? hat einer ein paar Tipps bitte?
-
Arbeite erst mal alle dir hier gegebenen Tipps ab, bereinige dadurch deine Fehler und dann hilft dir hier vielleicht doch noch jemand weiter.
-
Jo danke, ich habs jetzt soweit hinbekommen jetzt muss ich nur noch einen Termin aus dem binär file löschen.
Ich hab folgende Idee: ich lese aus dem binär file aus, gebe das Thema & Datum des Termins ein der gelöscht werden soll, such den dann wenn ich die position gefunden habe vom Termin dann überschreibe ich diesen Termin mit dem nächsten usw.
Also ich hab 5 Termine und der 3. soll gelöscht werden...
12345 --> der 4. termin wird uaf position 3 geschrieben und der 5. auf 4 -> 1245
Soll ich das so machen?
Aber was ist wenn ich den 5. Termin löschen müsste? Wer überschreibt den dann?
-
Keiner.
-
Ja ok, was hälst du von meiner Idee bzw. wie löse ich das mit dem letzten Termin weis das einer bitte?
-
Dann ist deine Datei nach dem 4. Eintrag zu Ende.
-
Danke!
Aber ich bekomms leider nicht hin. Kann mir wer bitte Tipps geben wie ich es machen kann?
Und ja und free braucht den 1. Wert wo der Pointer draufzeigt, den man allokiert..., hab ich nicht gemacht, aber das ist egal ist nebensache. Hauptprolem ist jetzt wie ich den Termin löschen soll
Hier das was ich bis jetzt habe:
void termin_löschen(char filename[]) { FILE* outFile=NULL; FILE* inFile=NULL; termine* termindata=NULL; termine* hilf=NULL; termine thema; int anz=0; anz=file_len(filename); termindata=malloc(sizeof(termine)*anz); if(termindata != NULL) { outFile=fopen(filename,"rb"); if(outFile == NULL) { printf("The files %s could not be opened",filename); exit(-1); } fread(termindata,sizeof(termine),anz,outFile); fclose(outFile); inFile=fopen(filename,"wb"); if(inFile == NULL) { printf("The file %s could not be opened!"); exit(-1); } printf("Geben Sie das Thema des Termins ein, der geloescht werden soll:") scanf("%s",thema.thema); for(x=0; x<anz; x++) { if(thema.thema == termindata->thema) { (termindata+x)->beschreibung=termindata->beschreibung // weis nicht ob das stimmt... außerdem gehört das dann wieder in eine schleife das es die ganzen termine nach vorschiebt irgendwie. Ich hab keine Ahnung } termindata++; } free(termindata); } else { printf("Memory allocation failure!"); } }
-
So ich habs nun probiert, zwar nicht mit schieben, dafür anders:
Das Problem dabe ist, das die if-anweisung zum überprüfen ob das thema ungleich ist mit dem eingegeben thema vollkommen ignoriert wird und ich weis leider nicht warum.
void termin_löschen(char filename[]) { FILE* outFile=NULL; FILE* inFile=NULL; termine* termindata = NULL; termine* hilf = NULL; char thema[100]; int x=0; int anz=0; anz=file_len(filename); fflush(stdin); printf("Geben Sie das Thema des Termins ein, der geloescht werden soll:"); gets(thema); termindata=(termine *)malloc(sizeof(termine)* anz); if(termindata != NULL) { hilf=termindata; outFile=fopen(filename,"rb"); if(outFile == NULL) { printf("The file %s could not be opened",filename); } fread(termindata,sizeof(termine),anz,outFile); fclose(outFile); inFile=fopen(filename,"wb"); if(inFile == NULL) { printf("The file %s could not be opened",filename); } for(x=0; x<anz; x++) { if(thema != termindata->thema)// <-- wird ignoriert { fwrite(termindata,sizeof(termine),1,inFile); } termindata++; } fclose(inFile); } else { printf("Memory allocation failure!"); } free(hilf); }
-
Die Vergleiche != und == und die mit < > funktionieren nicht bei Arrays.
-
Ah^^, ok danke dir
--> strcmp