000
08.02.2007, 14:15 Uhr
~FREE
Gast
|
Hi, ich hab hier ein Problem Und zwar schreiben wir in der schule ein Telefonbuch als Projekt. Die Daten kommen in folgende Struktur.
C++: |
struct daten { char nname [50]; char vname [50]; char telenr [50]; char stadt [50]; char addr [50]; };
|
Um eingebene Einträge zu speichern hab ich mit fopen ne txt datei gemacht wo die daten einfach hintereinander mit einem ";" als Trennzeichen gespeichert werden. Ein Eintrag pro Zeile. Bsp: nname1;vname1;telenr1;stadt1;addr1;\n nname2;vname2;telenr2;stadt2;addr2;\n
Nun funktioniert die Ladefunktion aber nicht. In der muss aus der Datei wieder eine verkettete Liste gemacht werden. Dazu hab ich nen counter, der bei jedem ";" nen ++ bekommt, anhand der Counterzahl weiß der PC dann in welche Variable er das ausgelesene schreiben muss. Natürlich hört er bei jedem ";" auch erstmal mit dem Auslesen auf. Ist ein Datenelelement fertig erzeugt wird es zusammen mit dem Listenkopf an die funktion geschickt die die Daten in eine Liste hängt. So weit der plan, aber irgendwie beachtet die fputc nur jedes 2. Zeichen, und so wirklich aufhören mitem lesen hört die funktion bei einem ";" auch ned Wäre cool wenn mir da jemand weiterhelfen könnte.
thx
(In der CPP sind ne Menge Couts zur fehlersuche, ich hab sie mal drinne gelassen, vieleicht helfen sie ja auch euch bei der fehlersuche)
C++: |
int load_tele(struct listenkopf*pkopf) {cout<< "In der load 1"<<endl;
FILE* ptr=NULL; int position=1,ret_value_EA, i=0; struct daten* dat;
cout<< "In der Load 2"<<endl;
dat=DatenErzeugung(); //Gibt ein Malloc datenelement zurück cout<< "In der Load 3"<<endl;
ptr=fopen("save.txt", "r"); cout<< "In der Load 4"<<endl;
if(ptr != NULL) {
while(fgetc(ptr) != EOF) { if(position==1) { i=0; while(fgetc(ptr) != ';') { dat->nname[i]=(char)fgetc(ptr); i++; } dat->nname[i]='\0'; cout<< "In der Load nname"<<dat->nname<<endl; } if(position==2) { i=0; while(fgetc(ptr) != ';') { dat->vname[i]=(char)fgetc(ptr); i++; } dat->vname[i]='\0'; cout<< "In der Load vname"<<dat->vname<<endl; } if(position==3) { i=0; while(fgetc(ptr) != ';') { dat->telenr[i]=(char)fgetc(ptr); i++; } dat->telenr[i]='\0'; cout<< "In der Load telenr"<<dat->telenr<<endl; } if(position==4) { i=0; while(fgetc(ptr) != ';') { dat->stadt[i]=(char)fgetc(ptr); i++; } dat->stadt[i]='\0'; cout<< "In der Load stadt"<<dat->stadt<<endl; } if(position==5) { i=0; while(fgetc(ptr) != ';') { dat->addr[i]=(char)fgetc(ptr); i++; } dat->addr[i]='\0'; cout<< "In der Load addr"<<dat->addr<<endl; position=0; }
position++; ret_value_EA=ElementAnhaengen(pkopf, dat); //Daten werden in die Liste geängt }
fclose(ptr); return 0; } else { cout << "Das Telefonbuch konnte nicht geladen werden"<<endl; getch(); return 1; } }
|
|