Hilfe zum Thema Adressverwaltung



  • Drei Sachen:

    1. Quellcode grundsätzlich in die C/C++-Tags setzen! Dann wird auch Syntax-Highlighting darauf angewendet.
    2. Euer Code ist reines C. Deshalb ist er hier im C++-Forum ja fast etwas unpassend. Aber solange kein Moderator etwas sagt, wird ja wohl keiner was dagegen haben.
    3. Genaueres zu dem Code kann ich noch nicht sagen, werd ich mir morgen mal anschauen. Sieht aber auf den ersten Blick nicht ganz schlecht aus. Vielleicht ein Rückgabewert für die Menue-Funktion, usw.



  • Dirk2904 schrieb:

    #include <math.h>

    wozu ist die nötig?

    char auswahl;
    int Anzahl, i;
    char Namen[5][100];

    Globale Variablen sind nicht immer guter Stil, sind aber manchmal auch nur schwer zu umgehen.

    int Menue() { ... }

    Dass die Funktion einen Rückgabewert hat, ist schonmal gut, leider wird er aber nicht benutzt. Dieser Wert könnte den Menüeintrag enthalten. Dadurch sparst du dir schon die globale Variable "auswahl".

    while ((auswahl >0) && (auswahl <7));

    "auswahl" enthält ein ASCII-Zeichen. Wenn du also abfragen willst, ob es das Zeichen "0" enthält, musst du schreiben

    while ((auswahl > '0') && (auswahl < '7'));
    

    ansonsten wird in diesem Fall geprüft, ob es Steuerzeichen enthält.
    Um von '0' auf 0 zurückzurechnen, empfehle ich die Codezeile:

    return auswahl - '0';
    

    '0' wird dann auch als Zahl interpretiert. (->ASCII-Tabelle: '0' = 48)
    Die Funktion gibt dann den Menüpunkt zurück, und zwar als echte Zahl (0...7, nicht '0'...'7')

    printf ("\nGeben Sie den Nachnamen ein: \n");
    scanf ("%s", &Namen[2][i]);

    So wie ich das sehe, ist das leider einfach nur falsch. Ein char-array, wie du es unter "Namen" angelegt hast, ist nicht das gleiche wie ein String!
    Du musst ein 3D-Array anlegen:

    char Namen[ANZAHL_EINTRAEGE_PRO_PERSON][TEXT_LAENGE_PRO_EINTRAG][ANZAHL_MOEGLICHER_PERSONEN];
    

    An dieser Stelle wäre es eben auch mit einer Klasse wesentlich einfacher. Ich bin mir selbst auch nicht immer sicher, wo nun welche Zahl in diesen mehrdimensionalen stehen müssen. Schön wäre zumindestens - wenn du schon das ganze in C machst - eine Struktur:

    struct Person
    {
        char Nachname[31];
        char Vorname[31];
        char PLZ[6];
        char Wohnort[31];
    }
    

    Davon legst du dann ein Array an und kannst dann über p[2].Nachname auf die Inhalte zugreifen.

    wie speichern/laden?

    Die einzelnen Structs kannst du durch Trennzeichen (z.b. '#' in eine Zeile schreiben. und diese dann wieder in eine Datei.
    Laden geht dann das ganze rückwärts.

    Nochmal die Frage: Muss es in C sein? Wieviele Personen wird das Programm irgendwann verwalten müssen? Soll es irgendwann mal wirklich eingesetzt werden oder ist es nur ein Beispiel zum lernen?

    Genug von mir, du bist wieder dran! 😃



  • Hallo Chef! 😃

    Ehm, also wir haben seit einem dreiviertel jahr c/c++ gelernt und versucht zu programmieren. Naja, bei unserem lehrer ist das schwer zu kapieren, da er das nicht so perfekt erklärt. Wir haben bis jetzt drei klausuren geschrieben. Als letzte klausur werden wir ein projekt machen. unsere aufgabe lautet ein programm zu schreiben, dass wie oben beschrieben, alles beinhalten soll.

    zu include <math.h> --> haben wir von unserem lehrer gelernt (brauch man bei einem Mathematikprogramm).

    Zu deinen Fragen:
    muss es in c sein? normal schon allerdings sind unsere rechner in der schule formatiert worden und nun haben wir nur noch c ++ auf denen installiert, somit müssen wir das in c++ programmieren.

    wieviel personen das programm enthalten soll? --> erstmal 10, aufstocken können wir das dann ja später noch

    soll es irgendwann mal wirklich eingesetzt werden oder ist es nur ein beispiel zum lernen? --> wie schon gesagt es gilt als klausurersatz. daher muss es schon funktionieren (es gibt eine note dafür). allerdings werden wir es nicht verkaufen !!!

    Also es ist wirklich nicht einfach zu verstehen was du geschrieben hast, z.B das mit "Struct" und mit "array". Mal ne frage: hast du icq? es wäre einfach das mal über icq zu regeln. ansonsten kannst du mir auch per email schreiben. solltest du icq gebe ich dir meine nr. wenn du mir per email antworten würdest (könnte vll. schlecht werden, die hier zu veröffentlichen)

    Hoffe auf schnelle antwort.
    Bis dann Dirk



  • Praktikant schrieb:

    printf ("\nGeben Sie den Nachnamen ein: \n");
    scanf ("%s", &Namen[2][i]);

    So wie ich das sehe, ist das leider einfach nur falsch. Ein char-array, wie du es unter "Namen" angelegt hast, ist nicht das gleiche wie ein String!
    Du musst ein 3D-Array anlegen:

    Das ist schon korrekt so. Das '&' kann man sich bei Arrays jedoch sparen.

    mfg
    v R



  • Hi Praktikant!

    Hier ist unser soweit fast fertiges Programm:

    #include <stdio.h>
    #include <math.h>
    #include <conio.h>
    
    int auswahl;
    int Anzahl,j;
    char Namen[5][100][100];
    FILE *LeseDatei, *SchreibDatei;
    
    Menue();
    int Eingeben()
    {
    
    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 Alleausgeben()
    { 
    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;
    }
    
    Name()
    {
    	Namen[1][j];
    	Namen[2][j];
    	Namen[3][j];
    	Namen[4][j];
    	Namen[5][j];
    	Namen[6][j];
    	Namen[7][j];
    scanf ("%s",&Name);
    }
    
    int Allesortieren()
    {
    
    return 0;
    }
    
    int Suchen()
    {
    printf ("Die Sachen sind sortiert");
    return 0;
    }
    
    int Speichern ()
    {
    	if (SchreibDatei = fopen( "adressen.txt", "w+t"));
    
    fprintf (SchreibDatei, "%s %s %s %s %s %s %s", Namen[1][j],Namen[2][j],Namen[3][j],Namen[4][j],Namen[5][j],Namen[6][j],Namen[7][j]);
    fclose (SchreibDatei );
    
    printf ("Gespeichert...\n\n");
    getch();
    Menue();
    return 0;
    
    }
    
    int Laden ()
    {
    
    return 0;
    }
    
    int main()
    {
    	Menue();
    
    }
    int Menue()
    {
    do
    {
    printf ("Menue: ein Menue fuer Adressverwaltung");
    printf ("\n 1. Namen eingeben:");
    printf ("\n 2. Namen alle ausgeben:");
    printf ("\n 3. Namen allle sortiert ausgeben:");
    printf ("\n 4. Namen suchen:");
    printf ("\n 5. Datensatz Speichern");
    printf ("\n 6. Datensatz laden.");
    printf ("\n\n\n Bitte waehlen Sie: ");
    scanf ("%d",&auswahl);
    switch(auswahl)
    	{
    	case 1: Eingeben();
    	break;
    	case 2: Alleausgeben();
    	break;
    	case 3: Allesortieren();
    	break;
    	case 4: Suchen();
    	break;
    	case 5: Speichern();
    	break;
    	case 6: Laden();
    	break;
    	}
    }
    while (auswahl >6);
    return 0;
    fflush(stdin);
    }
    

    Nun zu meiner Frage:
    Könntest du es mal bitte ausprobieren, ob das bei dir läuft? Dann haben wir noch Probleme mit dem Speichern und dem Laden, könntest du das wohl bitte für uns machen, denn nächste Woche Dienstag müssen wir das lauffähige Programm abgeben.
    Was noch merkwürdig ist, ist folgendes:
    1. Sobald wir etwas in dem Quellcode ändern und dann versuchen es auszuprobieren, dann kommt da so ne merkwürdige Fehlermeldung, ändern wir dann wieder etwas, dann läuft das Programm. Also müssen wir jedes Mal zwei Sachen ändern bevor wir das erneut testen wollen.
    2. Das Speichern funktioniert wohl irgendwie, nur in der Datei, die er erstellt, steht nichts drin (wirst du sehen, wenn du es ausprobierst).

    Ich würde mich riesig freuen, wenn du uns noch mal helfen würdest und das Programm zu Ende bringst.
    Vielen Dank im Voraus
    MfG
    Dirk



  • Dirk2904 schrieb:

    normal schon allerdings sind unsere rechner in der schule formatiert worden und nun haben wir nur noch c ++ auf denen installiert, somit müssen wir das in c++ programmieren.

    Der kann auch C Programme kompilieren.

    Meld dich ma per ICQ. UIN steht im Profil. 😉



  • Dirk2904 schrieb:

    1. Sobald wir etwas in dem Quellcode ändern und dann versuchen es auszuprobieren, dann kommt da so ne merkwürdige Fehlermeldung, ändern wir dann wieder etwas, dann läuft das Programm. Also müssen wir jedes Mal zwei Sachen ändern bevor wir das erneut testen wollen.

    was für eine fehlermeldung kommt denn?



  • Sorry dass ich jetzt erst schreibe! Normalerweise bekomm ich immer ne Mail, aber diesmal irgendwie nicht.

    Fehler:
    Unbehandelte Ausnahme in Test.exe: 0xC0000005: Access Violation

    Und dann will er nach dem Quellcode suchen.
    Voll Merkwürdig!

    Könntest du es noch irgendwie schaffen das hinzubekommen, also ich mein das gesamte Programm?

    Wäre voll nett!!!

    @ DJ Black Eagle:
    Also geaddet hab ich dich, wenn deine Nr. mit 113...... anfängt, musst du mich nur noch in deine Kontaktliste aufnehmen.



  • Dirk2904 schrieb:

    Unbehandelte Ausnahme in Test.exe: 0xC0000005: Access Violation

    Hört sich fast danach an, dass du irgendwo ein Array hast, das meinetwegen 5 Einträge zulässt, und greifst auf das 6. zu. Geh dein Programm mal mit dem Debugger Schritt für Schritt durch, damit du merkst, wo dieses Array ist.

    Dirk2904 schrieb:

    Könntest du es noch irgendwie schaffen das hinzubekommen, also ich mein das gesamte Programm?

    Ich will dir wirklich nicht schaden und dich einfach hängen lassen, aber ich hab dir doch schon gesagt, dass ich dir nicht das Programm einfach so schreibe. Für spezielle Fragen steht dir das Forum zur Verfügung. Den Rest musst du selbst machen, deshalb hast ja vermutlich auch du diese Aufgabe bekommen! 😉



  • okay, ich schaff das schon,:D
    nur eine frage hab ich momentan!
    ich hab schon wieder etwas am code geändert, hier der gesamte code:

    #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 ("Menue: ein Menue fuer Adressverwaltung");
    printf ("\n 1. Namen eingeben:");
    printf ("\n 2. Namen alle ausgeben:");
    printf ("\n 3. Namen allle sortiert ausgeben:");
    printf ("\n 4. Namen suchen:");
    printf ("\n 5. Datensatz Speichern");
    printf ("\n 6. Datensatz laden.");
    printf ("\n 7. Programm (b)eenden");
    printf ("\n\n\n Bitte waehlen Sie: ");
    scanf ("%d",&auswahl);
    
    }
    while (auswahl >6);
            switch(auswahl)
    	{
    	case 1: Eingeben();
    	break;
    	case 2: Alleausgeben();
    	break;
    	case 3: Allesortieren();
    	break;
    	case 4: Suchen();
    	break;
    	case 5: Speichern();
    	break;
    	case 6: Laden();
    	break;
    	case 7: Beenden();
    	break;
    	}
    
    return 0;
    }
    
    int Eingeben()
    {
    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 Alleausgeben()
    { 
    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 Allesortieren()
    {
    
    qsort(Namen[7][100][100]);
    printf ("Die Sachen sind sortiert");
    return 0;
    }
    
    int Suchen()
    {
    printf ("Die Sachen sind sortiert");
    return 0;
    }
    
    int Speichern ()
    {
    
    do
    {
    (SchreibDatei = fopen( "adressen.txt", "w+t"));
    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] );
    fclose( SchreibDatei );
    j++;
    }
    while (j<=Anzahl);
    
    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()
    
    {
    
        Menue();
    	return 0;
    }
    
    int main()
    {
    	Menue();
    return 0;
    }
    

    nun zur frage:
    der speichert das wohl in eine datei, allerdings speichert er nur einen eintarg, will man mehr eingeben, dann speichert er nur den zuerst eingegebenen namen.
    da müsstest du mir noch mal helfen, sodass er wenigsten 10 namen speichert oder alle!



  • #include <iostream>
    #include <vector>
    #include <cstdlib>
    
    class Eintrag
    {
        private:    
                std::string VorName;
                std::string NachName;
                std::string Strasse;
                int Hausnummer;
                int PLZ;
                std::string ORT;
                long Telefon;
        public:
                std::string getVorName()
                {
                    return VorName;
                }
                void setVorName(std::string value)
                {
                    VorName = value;
                }
    
                std::string getNachName()
                {
                    return NachName;
                }
                void setNachName(std::string value)
                {
                    NachName = value;
                }
                 std::string getStrasse()
                {
                    return Strasse;
                }
                void setStrasse(std::string value)
                {
                    Strasse = value;
                } 
                  int getHausnummer()
                {
                    return Hausnummer;
                }
                void setHausnummer(int value)
                {
                    Hausnummer = value;
                } 
                 int getPLZ()
                {
                    return PLZ;
                }
                void setPLZ(int value)
                {
                    PLZ = value;
                } 
                 std::string getORT()
                {
                    return ORT;
                }
                void setORT(std::string value)
                {
                    ORT = value;
                } 
                 long getTelefon()
                {
                    return Telefon;
                }
                void setTelefon(long value)
                {
                    Telefon = value;
                } 
    
                void Eingeben()
                {	
                        std::cout << std::endl << "\nBitte geben Sie den Vornamen ein: " << std::endl;;
                        std::cin >> VorName;
                        std::cout << "Geben Sie den Nachnamen ein: " << std::endl;
                        std::cin >> NachName;
                        std::cout << "Bitte geben Sie die Strasse ein: " << std::endl;
                        std::cin >> Strasse;
    
                        std::cout << "Bitte geben Sie die Hausnummer ein: " << std::endl;
                        std::cin >> Hausnummer;
                        std::cout << "Bitte geben Sie die Postleitzahl ein: " << std::endl;
                        std::cin >> PLZ; 
                        std::cout << "Bitte geben Sie den Ort ein: " << std::endl;
                        std::cin >> ORT;
                        std::cout << "Bitte geben Sie Ihre Telefonnummer ein: " << std::endl;
                        std::cin >> Telefon;
    
               } 
               void Ausgeben()
               {
                   std::cout << std::endl << "Vorname: " << VorName << std::endl << "Nachname: "
                   << NachName << std::endl << "Strasse: " << Strasse << std::endl << "Hausnummer: " 
                   << Hausnummer << std::endl << "PLZ: " << PLZ << std::endl << "Ort: " << ORT 
                   << std::endl << "Telefonnummer: " << Telefon << std::endl;
    
               }                        
    
    };
    
    class Adressliste
    {
        private:
            std::vector<Eintrag> Adressliste;
        public:
            std::vector<Eintrag> getAdressliste()
            {
                return Adressliste;
            } 
    
            void setAdressliste(std::vector<Eintrag> adr)
            {
                Adressliste = adr;
            }
            void Eingeben()
            {
                Eintrag e;
                e.Eingeben();
                Adressliste.push_back(e);
            }
            void AllesAusgeben()
            {
                for(int i = 0;i < Adressliste.size();i++)
                {
                    Adressliste[i].Ausgeben();
                }    
            }         
    
    };
    
    int main()
    {
        Adressliste adress;
        adress.Eingeben();
        adress.Eingeben();
        adress.AllesAusgeben(); 
        std::system("Pause");   
    }    
    
    /*
    int Allesortieren()
    {
    
    return 0;
    }
    
    int Suchen()
    {
    printf ("Die Sachen sind sortiert");
    return 0;
    }
    
    */
    

    So würd ichs machen.



  • Dirk2904 schrieb:

    nun zur frage:
    der speichert das wohl in eine datei, allerdings speichert er nur einen eintrag, will man mehr eingeben, dann speichert er nur den zuerst eingegebenen namen.

    Probier mal, das fclose(...) erst nach der while-schleife zu setzen.



  • wenn ich das fclose (..) nach der while - schleife setzte dann funktioniert das auch nicht!

    hast du noch nen anderen ratschlag?



  • 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. 😞


Anmelden zum Antworten