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.


Log in to reply