Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Daten werden nicht in die Datei gespeichert

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
10.11.2004, 13:30 Uhr
~c_neuling
Gast


Guten Tag,

ich habe eine kleine Datenbank geschrieben und nun werden die Daten beim Speichern nicht in die Datei geschrieben.
Es wird lediglich eine Leere Datei erzeugt.
Wäre super wenn mir jemand weiter helfen könnte!

Mein Programm sieht folgendermaßen aus:


C++:
# include <stdio.h>
# include <stdlib.h>

#include <sys/types.h>
#include <sys/stat.h>
#include <io.h>


typedef struct
{
char telefon[20];
char handy[20];
char email[40];
}ECOM;

typedef struct kontaktdaten
{
    char name[40];
    char vorname[40];
    char strasse[40];
    char hausnummer[10];
    char plz[7];
    char ort[30];
    
    ECOM ecom;

    struct kontaktdaten *next;
} KONTAKTDATEN;


void menue(KONTAKTDATEN*);
KONTAKTDATEN* eingabe(KONTAKTDATEN*);
void ausgabe(KONTAKTDATEN*);
void speichern(KONTAKTDATEN*);


void main(){                //Main-Funktion mit Menü-Aufruf

    KONTAKTDATEN *point = NULL;
    menue(point);
}


void menue (KONTAKTDATEN *point){        //Menü mit Aufruf der Unterfunktionen    

    char wahl;


    printf("| Bitte waehlen Sie:          |\n");
    printf("+-----------------------------+\n");
    printf("| <1> Daten eingeben          |\n");
    printf("| <2> Daten anzeigen          |\n");
    printf("| <3> Daten speichern         |\n");
    printf("| <4> Daten laden             |\n");
    printf("| <5> Ende                    |\n");
    printf("+-----------------------------+\n");
    
    fflush(stdin);
    scanf ("%c",&wahl);

    switch (wahl){

    case '1': point = eingabe(point);
    case '2': ausgabe(point);
    case '3': speichern(point);
    case '4':
    default: exit(0);
    }

    void menue();
}

void speichern (KONTAKTDATEN *c) {

char filename[20],filename2[20];
char wahl,wahl2;
int check;
int count = 0;

FILE *save;
KONTAKTDATEN *data = NULL;

/*
printf("Neue Datei anlegen? <j> / <n>\n");
fflush(stdin);
scanf ("%c",&wahl);

if (wahl == 'j')
{
    printf("Dateiname eingeben:");
    fflush(stdin);
    gets (filename);
    
    check = _creat( filename, _S_IREAD | _S_IWRITE );

    if (check == -1)
    {
        perror("Datei konnte nicht erstellt werden!");
        printf("\n\n");
        menue(c);
    }
    else
    {
        printf("Datei erfolgreich erstellt.\n\n");
        _close (check);
    }
}
*/

    printf("Daten jetzt speichern? <j> / <n>\n");
    fflush(stdin);
    scanf("%c",&wahl2);

    if (wahl2 == 'j')
    {
        printf("Speichern in Datei:");
        fflush(stdin);
        gets (filename2);

        if ((save = fopen (filename2,"w+" )) == NULL)
            printf("Datei konnte nicht geoeffnet werden\n");
        else
            printf("\nDatei wurde erfolgreich geoeffnet\n");

        while (data != NULL)
        {
            if (fwrite (&data,sizeof(KONTAKTDATEN),1,save) != 1)
            {
                fprintf(stderr,"Fehler beim Schreiben!\n");
                exit(0);
            }
            count++;
            data = data->next;
        }

        fclose (save);
        printf("%d Datensätze wurden erfolgreich gespeichert.\n",count);
        getchar();
        menue(c);
    }

    
}


KONTAKTDATEN* eingabe (KONTAKTDATEN* wurzel) {    //Funktion zum Einlesen der Daten

KONTAKTDATEN *p = NULL;

//p = wurzel;

static char neu;
//static int schleife = 0;

p = (KONTAKTDATEN*) malloc(sizeof(KONTAKTDATEN));

wurzel = p;

for (int i=0;i < 20;i++) {

p->next = NULL;

fflush(stdin);

printf("Bitte Nachname eingeben\n");
gets (p->name);

printf("Bitte Vorname eingeben\n");
gets (p->vorname);

printf("Bitte Strasse eingeben\n");
gets (p->strasse);

printf("Bitte Hausnummer eingeben\n");
gets (p->hausnummer);

printf("Bitte Postleitzahl eingeben\n");
gets (p->plz);

printf("Bitte Ort eingeben\n");
gets (p->ort);

printf("Bitte Telefon-Nummer eingeben\n");
gets (p->ecom.telefon);

printf("Bitte Handy-Nummer eingeben\n");
gets (p->ecom.handy);

printf("Bitte E-Mail-Adresse eingeben\n");
gets (p->ecom.email);


printf("\n\nSie haben %d/20 Datensaetzen eingelesen.\nWeiteren Datensatz einlesen? <j> / <n>\n",i+1);
scanf("%c",&neu);
printf("\n");

if (neu == 'n') menue(wurzel);

p->next = (KONTAKTDATEN*) malloc(sizeof(KONTAKTDATEN));

p=p->next;
}


return wurzel;
}

void ausgabe (KONTAKTDATEN *b)    //Funktion zur Ausgabe der Daten
{


static int nr=0;
nr++;

printf("\nDatensatz Nr.: %d\n",nr);
    
printf ("\n%s %s\n%s %s\n%s %s\n\nTel.:   %s\nHandy:  %s\n\nE-Mail: %s\n\n",
          b->vorname,b->name,b->strasse,b->hausnummer,
          b->plz,b->ort,b->ecom.telefon,b->ecom.handy,b->ecom.email);

if (b->next != NULL) {
     ausgabe(b->next);

}
menue (b);
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
10.11.2004, 14:28 Uhr
typecast
aka loddab
(Operator)


Es reicht, wenn du den relevanten Teil deines Programms postest. In diesem Fall die save Funktion. Hier findet man auch den Fehler:

C++:
void speichern (KONTAKTDATEN *c) {
//...
KONTAKTDATEN *data = NULL;
// data wird nicht veraendert
while (data != NULL)
{
//...
}
//...  
}



Die Schleife wird nie ausgefuehrt. Das ist das Problem
--
All parts should go together without forcing. ... By all means, do not use a hammer. (IBM maintenance manual, 1925)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
10.11.2004, 16:34 Uhr
~c_neuling
Gast


Vielen Dank typecast!

Werde ich mir merken!
Ich dachte es wäre evtl. nützlich, wenn man es sich z.B. per copy, paste einmal "praktisch" ansehen möchte.
Aber nochmals vielen Dank für deine Hilfe!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: