Jag skruvade på koden till följande i kompilator, testkörde och fick önskat resulat:
#include <stdio.h>
#include <stdlib.h>
typedef struct deltagareInformation {
char forNamn[10];
char efterNamn[20];
char klubb[20];
}deltagareInformation;
FILE *oppnaFil(char fil[]);
void skrivaFil(FILE *fp, struct deltagareInformation *deltagare);
int main(int argc, const char *argv[]) {
FILE *fp;
char filNamn[] = "ANMAL.dat";
deltagareInformation deltagare;
fp = oppnaFil(filNamn);
fseek(fp, 0, SEEK_END);
printf("\nAnge ditt förnamn");
fgets(deltagare.forNamn, 9, stdin);
printf("\nAnge ditt efterNamn");
fgets(deltagare.efterNamn, 19, stdin);
printf("\nAnge ditt klubbnamn");
fgets(deltagare.klubb, 19, stdin);
skrivaFil(fp, &deltagare);
fclose(fp);
}
FILE *oppnaFil(char namn[]) {
FILE *fp1;
if ((fp1 = fopen(namn, "r+b")) == NULL) {
if ((fp1 = fopen(namn, "w+b")) == NULL) {
printf("fel\n");
exit(1);
}
}
return fp1;
}
void skrivaFil(FILE *fp, struct deltagareInformation *deltagare) {
printf("Namnet är %s", deltagare->forNamn);
fwrite(deltagare, sizeof(deltagareInformation), 1, fp);
fflush(fp);
}
Tänk på att utfilen är en binärfil.
fflush() är inte kritiskt eftersom det görs en fclose() som också säkrar att filen skrivs.