#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

#include <stdlib.h>


#define SIZE 100


void addContact(FILE* fp);

void displayContact(FILE* fp);

void updateContact(FILE* fp);

void saveContacts(FILE* fp);

void loadContacts(FILE* fp);

void menu();


typedef struct Contact {

    char name[SIZE];

    char address[SIZE];

    char phone[SIZE];

    char detail[SIZE];

} PERSON;


int main() {

    FILE* fp;

    int select;


    if ((fp = fopen("out.txt", "r+")) == NULL) {

        fprintf(stderr, "Cannot open file. \n");

        exit(1);

    }


    while (1) {

        menu();

        printf("Enter your choice: ");

        scanf("%d", &select);

        switch (select) {

        case 1: addContact(fp); break;

        case 2: displayContact(fp); break;

        case 3: updateContact(fp); break;

        case 4: saveContacts(fp); break;

        case 5: loadContacts(fp); break;

        case 6:

            fclose(fp);

            exit(0); // Exiting the program

        default:

            printf("Invalid choice. Please enter a valid option.\n");

            break;

        }

    }


    fclose(fp);

    return 0;

}


void menu() {

    printf("Address Book Menu: \n");

    printf("1. Add a contact \n");

    printf("2. Display contacts \n");

    printf("3. Update a contact \n");

    printf("4. Save contacts to file (out.txt) \n");

    printf("5. Load contacts from file (in.txt) \n");

    printf("6. Exit \n");

    printf("====================================================\n");

}


PERSON get_record() {

    PERSON data;


    printf("Enter name: ");

    scanf(" %[^\n]", data.name); // Read until newline

    printf("Enter address: ");

    scanf(" %[^\n]", data.address);

    printf("Enter phone: ");

    scanf(" %[^\n]", data.phone);

    printf("Enter detail: ");

    scanf(" %[^\n]", data.detail);


    return data;

}


void addContact(FILE* fp) {

    PERSON data = get_record();

    fseek(fp, 0, SEEK_END);

    fwrite(&data, sizeof(data), 1, fp);

    printf("Contact added successfully.\n");

}


여기서 addContract로 입력하면 "한국어 인코딩으로 로드하는 동안 일부 바이트가 유니코드 대체 문자로 바뀌었습니다."라고 계속 뜨는데 서명 없는 UTF-8 인코딩 자동 검색 옵션 켜도 마찬가지더라고요. 혹시 해결 방법을 아시는 분 계시나요