Hilfe zum Thema Adressverwaltung
-
sicher, dass du die arrays richtig ansprichst? wie gesagt, ich hab da mein problem mit den mehrdimensionalen.
-
Mal abgesehen davon, das man dafür normalerweise in C++ ne streamklasse verwendet.
fopen,fscanf, printf ... ist alles C.
Was macht folgendes?SchreibDatei = fopen( "adressen.txt", "w+t")
Jedesmal wird eine neue adressen.txt gespeichert. Die alte adressen.txt wird überschrieben.
also aus "w+t" ein "a+" machen.
-
wird bei "a+" nicht einfach nur angehängt und ein zusätzlicher lesezugriff gestattet? wozu ein lesezugriff? ist es nicht schlauer, ein "w" zu schreiben, damit immer eine neue datei angelegt wird?
-
Ich will dich jetzt nicht verwirren und wenn du das was ich schreibe nicht verstehst dann ist es auch egal, aber an deiner Stelle würde ich für die Aufgabe eine doppelt verkettete Liste nehmen.
Ist imho das leichteste (wenn man es kann) und eleganteste.
-
Praktikant schrieb:
wird bei "a+" nicht einfach nur angehängt und ein zusätzlicher lesezugriff gestattet? wozu ein lesezugriff? ist es nicht schlauer, ein "w" zu schreiben, damit immer eine neue datei angelegt wird?
Mal ne Überlegung:
Daten suchen
Bisher wollt ihr das so machen, das ihr alle Adressen in den Speicher schaufelt, und dann im Speicher das Array durchsucht.
Wozu sich den Speicher vollmüllen ?
Warum nicht einfach nur die Datei durchsuchen.Daten speichern
Bisher löscht ihr die alte Adress Datei und damit alle bisher gespeicherten Adressen und erzeugt eine neue, und schreibt dann alles was im Array steht in die Datei.
Warum die alten Adressen löschen ?
Einfach mit "append" (fopen("Adress.txt","a" bzw "a+")) neue Daten "hinten" anhängen und die alten Daten unangetastet lassen.
-
AS106 schrieb:
Ich will dich jetzt nicht verwirren und wenn du das was ich schreibe nicht verstehst dann ist es auch egal, aber an deiner Stelle würde ich für die Aufgabe eine doppelt verkettete Liste nehmen.
Ist imho das leichteste (wenn man es kann) und eleganteste.naja ganz versteh ich dich nicht. und außerdem kann ich kein imho programmieren. hab also kein plan wie das funktioniert.
greeneagle schrieb:
Mal ne Überlegung:
Daten suchen
Bisher wollt ihr das so machen, das ihr alle Adressen in den Speicher schaufelt, und dann im Speicher das Array durchsucht.
Wozu sich den Speicher vollmüllen ?
Warum nicht einfach nur die Datei durchsuchen.Daten speichern
Bisher löscht ihr die alte Adress Datei und damit alle bisher gespeicherten Adressen und erzeugt eine neue, und schreibt dann alles was im Array steht in die Datei.
Warum die alten Adressen löschen ?
Einfach mit "append" (fopen("Adress.txt","a" bzw "a+")) neue Daten "hinten" anhängen und die alten Daten unangetastet lassen.ich versuch das mal hinzubekommen! Morgen muss ich das allerdings abgeben.
Praktikant schrieb:
Probier mal, das fclose(...) erst nach der while-schleife zu setzen.
ehm, merkwürding ich hab es nochmal ausprobiert und nun klappt das!
Danke!!!
-
Hi Praktinkant, brauch nun zum letzten mal deine hilfe!
Das ist mein Programm:
#include <stdio.h> #include <math.h> #include <conio.h> int auswahl; int Anzahl,j,z1; char Namen[7][100][100]; FILE *LeseDatei, *SchreibDatei; int menue() { do { printf ("\n\n\nHauptmenue: "); printf ("\n 1. Namen eingeben:"); printf ("\n 2. Namen alle ausgeben:"); printf ("\n 3. Datensatz speichern"); printf ("\n 4. Datensatz laden."); printf ("\n 5. Programm Beenden"); printf ("\n\n\n Bitte waehlen Sie: "); scanf ("%d",&auswahl); } while (auswahl >5); switch(auswahl) { case 1: eingabe(); break; case 2: ausgabe(); break; case 3: speichern(); break; case 4: laden(); break; case 5: beenden(); break; } return 0; } int eingabe() { printf ("\n\nBitte geben Sie die Anzahl der Namen ein: \n"); scanf ("%d", &Anzahl); j=Anzahl; do { printf ("\nBitte geben Sie den Vornamen ein: \n"); scanf ("%s", Namen[1][j]); printf ("\nGeben Sie den Nachnamen ein: \n"); scanf ("%s", Namen[2][j]); printf ("\nBitte geben Sie die Strasse ein: \n"); scanf ("%s", Namen[3][j]); printf ("\nBitte geben Sie die Hausnummer ein: \n"); scanf ("%s", Namen[4][j]); printf ("\nBitte geben Sie die Postleitzahl ein: \n"); scanf ("%s", Namen[5][j]); printf ("\nBitte geben Sie den Ort ein: \n"); scanf ("%s", Namen[6][j]); printf ("\nBitte geben Sie Ihre Telefonnummer ein: \n"); scanf ("%s", Namen[7][j]); j--; } while (j>0); menue(); return 0; } int ausgabe() { j=Anzahl; do { printf ("Vorname: %s \n",Namen[1][j]); printf ("Nachname: %s \n",Namen[2][j]); printf ("Strasse: %s \n",Namen[3][j]); printf ("Hausnummer: %s \n",Namen[4][j]); printf ("Postleitzahl: %s \n",Namen[5][j]); printf ("Ort: %s \n",Namen[6][j]); printf ("Telefonnummer: %s \n",Namen[7][j]); printf ("\n"); j--; } while (j>0); menue(); return 0; } int speichern () { SchreibDatei = fopen( "adressen.txt", "w+t"); do { fprintf( SchreibDatei, "%s %s %s %s %s %s %s\n", Namen[1][j], Namen[2][j], Namen[3][j], Namen[4][j], Namen[5][j], Namen[6][j], Namen[7][j] ); j++; } while (j<=Anzahl); fclose( SchreibDatei ); printf ("Gespeichert...\n\n\n"); getch(); menue(); return 0; } int laden () { do { (LeseDatei = fopen( "adressen.txt", "r+t")); fscanf( LeseDatei, "%s %s %s %s %s %s %s \n", Namen[1][j], Namen[2][j], Namen[3][j], Namen[4][j], Namen[5][j], Namen[6][j], Namen[7][j] ); fclose( LeseDatei ); j++; } while (j<Anzahl); printf ("Geladen..."); getch(); printf ("\n Gehe zurueck zum Hauptmenue \n"); getch(); menue(); return 0; } int beenden() { printf ("\nAuf Wiedersehen und bis zum naechsten mal\n"); printf ("\nWeiter mit beliebiger Taste!"); getch (); printf ("\n\n\n\n\n Copyright 2004 by Mathias Nee und Dirk Wichers"); getch (); return 0; } int main() { menue(); return 0; }
füg jetzt mal bitte meinen code in deinen compiler ein mach dann folgendes:
1. kompelieren und programm starten
2. "namen eintragen" aus dem menü auswählen
3. anzahl der namen eintragen (1-2 namen)
4. alles soweit eingeben
5. das porgramm speichern
6. das programm beenden
7. erneut kompilieren und das programm starten
8. "laden" im hauptmenü auswählen
und nun müsstest du folgende fehler wie ich haben:Unbehandelte Ausnahme in Test.exe:0x0000005 Access Violation.
und dann will er denn quellcode suchen!
keine ahnung woran das liegt.
ws muss nur noch das laden funktionieren, dann ist alles perfekt.
Versuch das bitte noch hinzubekommen, denn ich muss das morgen abgeben.
-
ich habs grad noch ne halbe stunde lang probiert, aber bin leider zu keinem ergebnis gekommen.
ich hab die zeile
fscanf( LeseDatei, "%s %s %s %s %s %s %s \n", Namen[1][j], Namen[2][j], Namen[3][j], Namen[4][j], Namen[5][j], Namen[6][j], Namen[7][j] );
mal durch die zeile
fscanf(LeseDatei, "%s %s %s %s %s %s %s \n", a,b,c,e,d,f,g);
ersetzt. da gings ohne probleme. bei deiner lösung kommt aber auch diese zugriffsverletzung bei mir.
wie gesagt, diese mehrdimensionalen arrays mag ich nicht. hier wieder ein beispiel, warum nicht.eine andere sache ist mir beim laden noch aufgefallen. die schleife läuft ja über eine do-statement. das j ist am anfang nicht gesetzt (j=0) und das Anzahl ist auch nicht gesetzt. die schleife dürfte also gar nicht so ordentlich laufen.
sorry, dass ich dir nicht wirklich helfen konnte, aber alles andere funktioniert ja.
-
Hallo Zusammen!
Gute Nachrichten, unser Lehrer ist heute krank,
d.h. dass wir das porgramm erst in zwei wochen abgeben müssen.So, wir sitzen gerade in'ner schule vor den rechnern und tüffteln gerade wieder an dem programm herum. scheint als würden wir das noch hinbekommen (speichern, laden, etc.)
-
Moin Leude!
Mein Pauker hat gerade das programm bewertet
84 % hab ich dafür bekommmen, das heißt ne glatte 2
Vielen Dank nochmal für eure Hilfe!
Man sieht sichDirk