Da stimmt einiges nicht, z.B. input war nicht ausreichend dimensioniert,
wenn du auch in eine Datei schreiben willst, darfst du natürlich nicht Modus "r" wählen, stattdessen lieber "a", wobei du dir dann fseek sparen kannst, denn alle Schreiboperationen passieren dann automatisch am Dateiende, die Datei wurde nach dem 1. Schreibversuch geschlossen(!), sämtliche Rückgabewerte werden nicht ausgewertet usw...
Ich würde mal sagen, 3-.
Globale Variablen zu verwenden, ist unschöner Stil und wirklich nur anzuwenden, wenn es gar nicht anders geht.
typedef struct {
char name[30];
char vorname[20];
char adresse[50];
}DSatz;
DSatz dsatz;
FILE *fp;
int run = 0;
char input[100];
char fname[100];
//Prototypen
void menu();
void neu();
void update();
////////////////////////////////////////////////////////////////////////////////////////////////////////////
int main (int argc, char ** argv){ //int argc, char ** argv
menu();
while (run==0) {
system("color 0F");
printf("\nEingabe: ");
scanf("%99s", input);
printf("\n");
switch(*input) {
case '0': neu();break;
case '1': update();break;
case '2': printf("Funktionsaufruf Ausgeben\n");break;
case '3': printf("\nProgramm beendet!\n");run = 1;fclose(fp);break;
default: system("color 0C");printf("\nFehlerhafte Eingabe\n");
}
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////
void menu() {
printf("\n");
printf("***********************************************\n");
printf("* *\n");
printf("* Programm: Datei-Management *\n");
printf("* ----------------------------- *\n");
printf("* Eingabe: [0] (neue Datei anlegen) *\n");
printf("* [1] (Datei bearbeiten) *\n");
printf("* [2] (Datensaetze ausgeben) *\n");
printf("* [3] (Programm beenden) *\n");
printf("* *\n");
printf("* *\n");
printf("***********************************************\n");
}
///////////////////////////////////////////////////////////////////////////////////////////////////////
void neu() {
printf("Dateinamen eingeben\n");
scanf("%99s",fname);
fp = fopen(fname, "a+b"); //O_CREAT|O_WRONLY
printf("\nDONE\n");
}
///////////////////////////////////////////////////////////////////////////////////////////////////////
void update() {
printf("\nName -> ");
scanf("%29s",dsatz.name);
fwrite(&dsatz,sizeof dsatz,1,fp);
}