I'm trying to build a gym program for a project in college. We're doing it in C in a Linux environment. I do not have problems reading from the file, but when I try to update the file, if I print to file with '\n' at the end, it puts double enters between line. And if I don't, it puts all the data in one line.
What should I do?
i.e. I've added an example of a function that reads from the file and one that updates it.
Employees** Init_Gym_emp(Employees** emp, int* num) {
    FILE* f = fopen("Gym Employees.txt", "r");
    if (f == NULL) {
        printf("Failed opening the file. Exiting!\n");
        exit(1);
    }
    char c = '\0';
    while (fscanf(f, "%c", &c) == 1) {
        if (c == '\n') num[0]++;
    }
    if (num[0] > 0) num[0]++;
    fseek(f, 0, SEEK_SET);
    Employees* tmp = (Employees*)malloc(sizeof(Employees));
    if (tmp == NULL) {
        printf("Memory allocation failed\n");
        exit(1);
    }
    emp = (Employees**)malloc(sizeof(Employees*)*(num[0]));
    if (emp == NULL) {
        printf("Memory allocation failed\n");
        exit(1);
    }
    int i = 0;
    tmp->first_name = (char*)malloc(sizeof(char)* 20);
    tmp->last_name = (char*)malloc(sizeof(char)* 20);
    tmp->user_name = (char*)malloc(sizeof(char)* 20);
    tmp->password = (char*)malloc(sizeof(char)* 20);
    tmp->user_type = (char*)malloc(sizeof(char)* 20);
    while (fscanf(f, "%20[^#]%*c%20[^#]%*c%ld%*c%20[^#]%*c%10[^#]%*c%20[^#]%*2c", tmp->first_name, tmp->last_name, &tmp->id, tmp->user_name, tmp->password, tmp->user_type) == 6) {
        emp[i] = (Employees*)malloc(sizeof(Employees));
        if (emp[i] == NULL) {
            printf("Memory allocation failed\n");
            exit(1);
        }
        emp[i]->first_name = (char*)malloc(sizeof(char)* (strlen(tmp->first_name) + 1));
        emp[i]->last_name = (char*)malloc(sizeof(char)* (strlen(tmp->last_name) + 1));
        emp[i]->user_name = (char*)malloc(sizeof(char)* (strlen(tmp->user_name) + 1));
        emp[i]->password = (char*)malloc(sizeof(char)* (strlen(tmp->password) + 1));
        emp[i]->user_type = (char*)malloc(sizeof(char)* (strlen(tmp->user_type) + 1));
        strcpy(emp[i]->first_name, tmp->first_name);
        strcpy(emp[i]->last_name, tmp->last_name);
        strcpy(emp[i]->user_name, tmp->user_name);
        strcpy(emp[i]->password, tmp->password);
        strcpy(emp[i]->user_type, tmp->user_type);
        emp[i]->id = tmp->id;
        i++;
    }
    free(tmp->first_name);
    free(tmp->last_name);
    free(tmp->user_name);
    free(tmp->password);
    free(tmp->user_type);
    free(tmp);
    fclose(f);
    return emp;
}
void update_Gym_emp(Employees** emp, int* num) {
    remove("Gym Employees.txt");
    FILE* f = fopen("Gym Employees.txt", "w");
    if (f == NULL) {
        printf("Failed opening the file. Exiting!\n");
        exit(1);
    }
    int i;
    for (i = 0; i < num[0]; i++) {
        fprintf(f, "%s#%s#%ld#%s#%s#%s#", emp[i]->first_name, emp[i]->last_name, emp[i]->id, emp[i]->user_name, emp[i]->password, emp[i]->user_type);
    }
    fclose(f);
}
 
     
    