Program schreibt nur einmal
-
ALso ersmal moin an alle
FOlgendes problem bietet mir zurzeit die strin .
habe vor knapp nem halben jahr inna schule angefangen programmieren zulernen und muss nun ein prog schreiben welches in einer externen datei sachen abspeichert und ausliest.
klappt eig auch ganz okai.
Nur leider speichert er nur einmal d.h. wenn ich das programm starte und wieder beende speichert er nicht mehr//--------------------------------------------------------------------------- #include <iostream.h> #include <conio.h> #include <string.h> #include <iomanip.h> #include <stdlib.h> #include <stdio.h> int i=1,j,anders; char funk,Neu='j'; FILE *Liste; struct Adresse { char Name[40]; long int PLZ; char Ort[20]; char Strasse[30]; char TelNummer[15]; char Handy[15]; char Icq[9]; char email[40]; }A[22]; //--------------------------------------------------------------------------- void neu (void ); void Bearbeiten(void); int main() { Liste = fopen("Liste.dat", "r+b"); if (Liste==NULL) { cout <<"Datei nicht gefunden"<<endl; cout <<"Datei wird neu angelegt"<<endl; Liste=fopen("Liste.dat", "w+b"); getch(); goto start; } else { start:; //else anfang fread(A, sizeof(Adresse),22,Liste); while (Neu=='j') { //menü while anfang clrscr(); cout <<"Welche Funktion wollen Sie benutzen?\nL/l zum Lesen\nB/b zum Bearbeiten\nN/n zum Neu Schreiben\nE/e zum Beenden\n"; funk=getch(); cout<<"\n"; void rewind (FILE *Liste); switch(funk) { //switch anfang case 'L': case 'l': { //case 1anfang clrscr(); //menüpunkt 1 foer anfang for (i=1;i<=A[0].PLZ;i++) { cout <<"Kontakt Nr "<<i<<endl; cout <<A[i].Name<<endl; } cout <<"Neustarten? (j/n)"; cin >>Neu; fclose(Liste); clrscr(); goto weiter; } //case 1ende case 'B': case 'b': { //case 2anfang Bearbeiten(); } //case 2ende break; case 'N': case 'n': { //case 3anfang //if anfang neu(); break; } //case 3ende case 'E': case 'e': { cout <<"\apush that button :>"; getch(); goto exit; } default: printf("\a\nFalsche Eingabe Neustarten ? ( j/n) : "); cin >>Neu; if (Neu!='j') goto exit; else goto weiter; } //switch ende printf("\nNeustarten? (j/n) : "); cin >>Neu; weiter:; } //menü while ende exit:; fclose(Liste); return 0; } //else ende } //------------------------------------------------------------------------------ void neu (void ) { i=A[0].PLZ; while(Neu=='j'&&i<=21) { //while 2anfang i++; clrscr(); cout<<"Sie sind bei Kontakt " <<i<<endl; cout <<"Vorname, Name : " ; gets(A[i].Name); cout <<"PLZ : "; cin >>A[i].PLZ; cout <<"Wohnort : "; gets(A[i].Ort); cout <<"Strasse : "; gets(A[i].Strasse); cout <<"Telefonnummer : "; gets(A[i].TelNummer); cout <<"Handynummer : "; gets(A[i].Handy); cout <<"ICQ Nummer : "; cin >>A[i].Icq ; cout <<"email Adresse : "; gets(A[i].email); cout << "wollen Sie einen neuen Kontakt anlegen ? (j/n) : " ; cin >>Neu; } //while 2ende A[0].PLZ=i; fwrite(A, sizeof(Adresse),22,Liste); cout <<"Gespeichert"; fclose(Liste); } //----------------------------------------------------------------------------- void Bearbeiten(void) { while (Neu=='j') { //while 1anfang clrscr(); cout <<"Welchen Kontakt m\224chten sie \204ndern?"; for (i=1;i<=21;i++); cout <<"\n"<<i<<". "<<A[i].Name <<endl; //for anfang/ende cin >>j; clrscr(); cout <<"Was wollen Sie \204ndern ?\n1.Name\n2.PLZ\n3.Wohnort\n4.Strasse\n5.Telefon Nummer\n6.Handynummer\n7.icq Nummer\n8.Emailadresse\n9.Alles\n10.Zur\201ck zum Hauptmenue\n"; cin >> anders; switch(anders) { case 1: { //untercase 1anfang cout <<"Alter Name : "<<A[j].Name; cout <<"\nNeuer Name?: "; cin >>A[j].Name; goto NEU; } //untercase 1ende case 2: { //untercase 2anfang cout <<"Alte PLZ : "<<A[j].PLZ; cout <<"\nNeue PLZ?: "; cin >>A[j].PLZ; goto NEU; } //untercase 2ende case 3: { //untercase 3anfang cout <<"Alter Wohnort : "<<A[j].Ort; cout <<"\nNeuer Wohnort?: "; cin >>A[j].Ort; goto NEU; } //untercase 3ende case 4: { //untercase 4anfang cout <<"Alte Strasse : "<<A[j].Strasse; cout <<"\nNeue Strasse?: "; cin >>A[j].Strasse; goto NEU; } //untercase 4ende case 5: { //untercase 5anfang cout <<"Alte Telefon Nummer : "<<A[j].TelNummer; cout <<"\nNeue Telefon Nummer ?: "; cin >>A[j].TelNummer; goto NEU; } //untercase 5ende case 6: { //untercase 6anfang cout <<"Alte Handynummer : "<<A[j].Handy; cout <<"\nNeuer Handynummer?: "; cin >>A[j].Handy; goto NEU; } //untercase 6ende case 7: { //untercase 7anfang cout <<"Alte ICQ Nummer : "<<A[j].Icq; cout <<"\nNeue ICQ Nummer?: "; cin >>A[j].Icq; goto NEU; } //untercase 7ende case 8: { //untercase 8anfang cout <<"Alte email Adresse : "<<A[j].email; cout <<"\nNeuer email Adresse?: "; cin >>A[j].email; goto NEU; } //untercase 8ende case 9: { //untercase 9anfang cout <<"Alter Name : "<<A[j].Name; cout <<"\nNeuer Name?: "; cin >>A[j].Name; clrscr(); cout <<"Alte PLZ : "<<A[j].PLZ; cout <<"\nNeue PLZ?: "; cin >>A[j].PLZ; clrscr(); cout <<"Alter Wohnort : "<<A[j].Ort; cout <<"\nNeuer Wohnort?: "; cin >>A[j].Ort; clrscr(); cout <<"Alte Strasse : "<<A[j].Strasse; cout <<"\nNeue Strasse?: "; cin >>A[j].Strasse; clrscr(); cout <<"Alte Telefon Nummer : "<<A[j].TelNummer; cout <<"\nNeue Telefon Nummer ?: "; cin >>A[j].TelNummer; clrscr(); cout <<"Alte Handynummer : "<<A[j].Handy; cout <<"\nNeuer Name?: "; cin >>A[j].Handy; clrscr(); cout <<"Alte ICQ Nummer : "<<A[j].Icq; cout <<"\nNeue ICQ Nummer?: "; cin >>A[j].Icq; clrscr(); cout <<"Alte email Adresse : "<<A[j].email; cout <<"\nNeue email Adresse?: "; cin >>A[j].email; clrscr(); goto NEU; } //untercase 9ende case 10: { //untercase 10anfang goto weiter; } //untercase 10ende NEU:; cout <<"Wollen Sie noch einen kontakt \204ndern? (j/n)"; cin >> Neu; fwrite(A, sizeof(Adresse),22,Liste); fclose(Liste); } //while 1ende } weiter:; }
vielen dank im voraus für jeden tipp den ihr mir geben könnt :>
-
Warum nutzt du in Zeile 170, 177 und weitere "goto" und kein "break"?
Warum rückst du die Zeilen nicht nach einem System ein oder hab ich deins nur nicht verstanden?
Warum nimmst du alte C++ Header - kann dein Kompiler keine neuen?
Und C Header includierst du auch noch?Entscheide dich bitte ob du C oder C++ Quelltext nutzen willst.
Die willkürliche Mischung von beidem kann dir sonst Ärger bereiten!
-
Tipps:
1. Falsches Forum, sh. C++
2. Deine Formatierung der Source ist so ungewöhnlich wie leseunfreundlich.
3. Mit der Goto- Wüste wirst Du auch im richtigen Forum anecken.
4. Versuch's mal auf Deutsch.Für's Erste genug?
-
Du schreibst scheinbar für einen Borland-Compiler.
Ich würde für die Aufgabe kein "goto" nutzen.
z.B. hast du das Zeillabel "weiter" 2 mal im Quelltext.
-
[quote="sas90"]
Nur leider speichert er nur einmal d.h. wenn ich das programm starte und wieder beende speichert er nicht mehr
[/cpp]ein programm, das beendet ist, kann nix speichern!
-
Nachdem dein Programm die Datei in Zeile 42 eigelesen hat steht der fileseek-pointer am Ende der Datei. Wenn die Datei dann in Zeile 145 wieder geschrieben wird, werden die Daten nicht überschieben sondern nur angehängt. Wenn du hinter Zeile 42 ein rewind(Liste) einfügst, dann sollte es funktionieren.
Besser wäre es aber, wenn du die Datei vor dem lesen öffnest und gleich danach wieder schließt, und beim schreiben das selbe. Andernfalls wird deine Datei beim löschen von Einträgen nicht kleiner! Du kannst dazu zwei Unterprogramme datei_lesen() und datei_schreiben() schreiben.