brett vorm kopf? datensatz speichern geht nett?!
-
hi, habe hier mal versucht nen paar daten zu speichern aber es funzt net kann mir einer sagen warum ?
habe natürlich weiter geprogt nun is nen 2. fehler gekommen ...#include <stdio.h> #include <stdlib.h> #include <string.h> /* Strukturdeklarationen */ typedef struct { int tag; int monat; int jahr; } DATUM; typedef struct { int persnr; char name[12]; char vorname[15]; char wohnort[20]; DATUM eintritt; float gehalt; } PERSONAL; /* Funktionsprototypen */ PERSONAL satz_ein (void); void satz_aus (const PERSONAL *); void aufnahme (const char *); void ausgabe(const char *); //void aendern(const char *, int); void suchen (const char *, const char *); float mittel(const char *); main() { int wahl,suchnr; char datname[80]="persdat.dat_linux",suchname[12]; printf("\n\n\npflege von personaldaten\n\n"); /* printf("dateiname : "); gets(datname); */ do { printf("\n\n\naufnahme........................... < 1 >\n"); printf("ausgabe ........................... < 2 >\n"); printf("suchen ........................... < 3 >\n"); printf("update ........................... < 4 >\n"); printf("mittelwert ........................ < 5 >\n"); printf("ENDE ........................... < 0 >\n"); printf("ihre wahl : "); scanf("%d",&wahl); getchar(); switch (wahl) { case 1: aufnahme(datname); break; case 2: ausgabe(datname); break; case 3: printf("suchname: "); gets(suchname); suchen(datname,suchname); break; //case 4: printf("personalnummer : "); // scanf("%d",&suchnr); // getchar(); //aendern(datname,suchnr); //break; case 5: printf("mittleres gehalt : %.2f\n",mittel(datname)); break; case 0: printf("programmende\n"); break; default: printf("falsche wahl\n"); } /* Ende von switch */ fflush(stdin); printf("\n\nweiter mit return "); getchar(); } while (wahl); } void suchen (const char bla[80], const char such[12]) { PERSONAL datensatz; long i=0,j,k; while(such[i]!='\0') i++; FILE *dz;// warum darf ich das nu net mehr machen ?! dz=fopen(bla,"rb"); if (dz==NULL) { printf("laden funzt net!"); exit(EXIT_FAILURE); } while (!feof(dz)) { fread(&datensatz,sizeof (PERSONAL),1,dz); for(j=0;j<=i;j++) { if (such[j]==datensatz.name[j]) k++; } if (i==k) satz_aus(&datensatz); } } float mittel(const char bla[80]) { PERSONAL datensatz; long i=0; float erg=0; FILE *dz; dz=fopen(bla,"rb"); if (dz==NULL) { printf("laden funzt net!"); exit(EXIT_FAILURE); } while (!feof(dz)) { fread(&datensatz,sizeof (PERSONAL),1,dz); erg=erg+datensatz.gehalt; i++; } fclose(dz); erg=erg/i; printf("i gleich %ld\n\n",i); return erg; } void aufnahme (const char bla[80]) { FILE *dz; PERSONAL datensatz; long a=1; dz=fopen(bla,"a"); if (dz==NULL) { printf("laden funzt net!"); exit(EXIT_FAILURE); } datensatz=satz_ein(); while (a==1) { fwrite(datensatz,sizeof (PERSONAL),1,dz);// 1. fehler ... warum ? printf("weitere datensätze eingeben mit 1"); scanf("%ld",&a); } fclose(dz); } PERSONAL satz_ein (void) { PERSONAL pers1; printf("persNr?"); scanf("%i%*c",&pers1.persnr); printf("vorname?"); scanf("%S",&pers1.vorname); printf("name?"); scanf("%S",&pers1.name); printf("einstellungsdatum,tag?"); scanf("%i",&pers1.eintritt.tag); printf("einstelungsdatum,monat?"); scanf("%i",&pers1.eintritt.monat); printf("einstellungsdatum,jahr?"); scanf("%i",&pers1.eintritt.jahr); printf("gehalt?"); scanf("%f%*c",&pers1.gehalt); printf("wohnort?"); gets(pers1.wohnort); return pers1; } void satz_aus (const PERSONAL *pers1) { printf("persNR:%i\n",pers1->persnr); printf("Name %s ,Vorname %s\n",pers1->name,pers1->vorname); printf("einstellungsdatum : %i:%i:%i\n",pers1->eintritt.tag,pers1->eintritt.monat,pers1->eintritt.jahr); printf("gehalt ist : %.2f\n",pers1->gehalt); printf("wohnort:%s\n",pers1->wohnort); } void ausgabe (const char datname[80] ) { FILE *dz; PERSONAL datensatz; dz=fopen(datname, "rb"); if (dz==NULL) { printf("laden funzt net!"); exit(EXIT_FAILURE); } fread(&datensatz,sizeof ( PERSONAL),1,dz); while (!feof(dz)) { satz_aus(&datensatz); fread(&datensatz,sizeof (PERSONAL),1,dz); } }
thx
-
ich glaube du hast vergessen einzugeben ob du die datei nur zum lesen oder zum schreiben öffnest.
pfile = fopen (Filename, "w"); /*also am schluss "w" für write und "r" für read*/
mfg C-Progger
-
mmh ich habe gesagt weiterschreiben -.-
dz=fopen(bla,"a");
-
fehler 1. hat sich erledigt ^^ nen & vergessen
-
hat sich erledigt habe das prog nun erst mal am laufen ^^
naja bis auf eine sache, da weiss ich aber nicht wie das geht ^^ deswegen mach ich nichts mehr dran.
hier zum gucken wie ich es gelöst habe#include <stdio.h> #include <stdlib.h> #include <string.h> /* Strukturdeklarationen */ typedef struct { int tag; int monat; int jahr; } DATUM; typedef struct { int persnr; char name[12]; char vorname[15]; char wohnort[20]; DATUM eintritt; float gehalt; } PERSONAL; /* Funktionsprototypen */ PERSONAL satz_ein (void); void satz_aus (const PERSONAL *); void aufnahme (const char *); void ausgabe(const char *); //void aendern(const char *, int); void suchen (const char *, const char *); float mittel(const char *); main() { int wahl,suchnr; char datname[80]="persdat.dat_linux",suchname[12]; printf("\n\n\npflege von personaldaten\n\n"); /* printf("dateiname : "); gets(datname); */ do { printf("\n\n\naufnahme........................... < 1 >\n"); printf("ausgabe ........................... < 2 >\n"); printf("suchen ........................... < 3 >\n"); printf("update ........................... < 4 >\n"); printf("mittelwert ........................ < 5 >\n"); printf("ENDE ........................... < 0 >\n"); printf("ihre wahl : "); scanf("%d",&wahl); getchar(); switch (wahl) { case 1: aufnahme(datname); break; case 2: ausgabe(datname); break; case 3: printf("suchname: "); gets(suchname); suchen(datname,suchname); break; //case 4: printf("personalnummer : "); // scanf("%d",&suchnr); // getchar(); //aendern(datname,suchnr); //break; case 5: printf("mittleres gehalt : %.2f\n",mittel(datname)); break; case 0: printf("programmende\n"); break; default: printf("falsche wahl\n"); } /* Ende von switch */ fflush(stdin); printf("\n\nweiter mit return "); getchar(); } while (wahl); } void suchen (const char bla[80], const char such[12]) { PERSONAL datensatz; long i=0,j,k=0; FILE *dz; dz=fopen(bla,"rb"); if (dz==NULL) { printf("laden funzt net!"); exit(EXIT_FAILURE); } while(such[i]!='\0') i++; while (!feof(dz)) { fread(&datensatz,sizeof (PERSONAL),1,dz); for(j=0;j<i;j++) { if (such[j]==datensatz.name[j]) k++; } if (i==k) satz_aus(&datensatz); k=0; } } float mittel(const char bla[80]) { PERSONAL datensatz; long i=0; float erg=0; FILE *dz; dz=fopen(bla,"rb"); if (dz==NULL) { printf("laden funzt net!"); exit(EXIT_FAILURE); } while (!feof(dz)) { fread(&datensatz,sizeof (PERSONAL),1,dz); erg=erg+datensatz.gehalt; i++; } fclose(dz); erg=erg/i; printf("i gleich %ld\n\n",i); return erg; } void aufnahme (const char bla[80]) { FILE *dz; PERSONAL datensatz; long a=1; dz=fopen(bla,"a"); if (dz==NULL) { printf("laden funzt net!"); exit(EXIT_FAILURE); } datensatz=satz_ein(); while (a==1) { fwrite(&datensatz,sizeof (PERSONAL),1,dz); printf("weitere datensätze eingeben mit 1"); scanf("%ld",&a); } fclose(dz); } PERSONAL satz_ein (void) { PERSONAL pers1; printf("persNr?"); scanf("%i%*c",&pers1.persnr); printf("vorname?"); gets(pers1.vorname); printf("name?"); gets(pers1.name); printf("einstellungsdatum,tag?"); scanf("%i",&pers1.eintritt.tag); printf("einstelungsdatum,monat?"); scanf("%i",&pers1.eintritt.monat); printf("einstellungsdatum,jahr?"); scanf("%i",&pers1.eintritt.jahr); printf("gehalt?"); scanf("%f%*c",&pers1.gehalt); printf("wohnort?"); gets(pers1.wohnort); return pers1; } void satz_aus (const PERSONAL *pers1) { printf("persNR:%i\n",pers1->persnr); printf("Name %s ,Vorname %s\n",pers1->name,pers1->vorname); printf("einstellungsdatum : %i:%i:%i\n",pers1->eintritt.tag,pers1->eintritt.monat,pers1->eintritt.jahr); printf("gehalt ist : %.2f\n",pers1->gehalt); printf("wohnort:%s\n",pers1->wohnort); } void ausgabe (const char datname[80] ) { FILE *dz; PERSONAL datensatz; dz=fopen(datname, "rb"); if (dz==NULL) { printf("laden funzt net!"); exit(EXIT_FAILURE); } fread(&datensatz,sizeof ( PERSONAL),1,dz); while (!feof(dz)) { satz_aus(&datensatz); fread(&datensatz,sizeof (PERSONAL),1,dz); } }