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); }
|
|