Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #pragma warning(disable:4996)
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #define NAME_LEN 20
- #pragma pack(push,1)
- typedef struct
- {
- char m_Name[NAME_LEN];
- char m_TelNUmber[NAME_LEN];
- }Member;
- #pragma pack(pop)
- int main()
- {
- Member *mem;
- FILE* fp;
- int iSize;
- int iMemberCount = 0;
- int iInput = 0;
- char cInputName[NAME_LEN] = { 0 };
- char cInputTel[NAME_LEN] = { 0 };
- // 1. FILE* fp에 rb모드로 스트림 오픈
- fp = fopen("BinaryTest.bin", "rb");
- // 2. 파일 지시자를 파일의 끝으로 보낸다.
- fseek(fp, 0, SEEK_END);
- // 3. iSize변수에 ftell()의 리턴값 저장. ftell() = 현재 파일 지시자가 있는 위치의 바이트를 반환한다. 즉, 현재 파일 지시자는 끝에있기 때문에 파일의 크기를 반환한다.
- iSize = ftell(fp);
- // 4. 파일 지시자를 다시 시작점으로 보낸다.
- fseek(fp, 0, SEEK_SET);
- // 5. iSize만큼(파일의 크기 만큼) mem에다가 동적할당. 이후 memset으로 값 모두 초기화.
- mem = (Member*)malloc(iSize);
- memset(mem, 0, iSize);
- // 6. iSize만큼의 바이너리를 읽어온다.
- fread((Member*)mem, iSize, 1, fp);
- // 7. Member구조체 1개의 크기는 40바이트이다. ( sizeof(Member)하면 40바이트 나옴 ). 때문에, iSize / 40은 구조체 1개가 된다. 그리고 구조체 1개는 멤버 1명이다.
- // 즉, iMemberCount에는 멤버의 수가 저장된다.
- iMemberCount = iSize / 40;
- fclose(fp);
- fp = fopen("BinaryTest.bin", "wb");
- // 8. Mem변수 세팅 (새로운 멤버 입력, 초기화 등..)
- while (1)
- {
- system("cls");
- printf("현재 멤버 수 : %d\n", iMemberCount);
- puts("1. 입력");
- puts("2. 모든사람 출력");
- puts("3. 주소록 초기화");
- puts("4. 프로그램 종료");
- fputs("선택하세요 : ", stdout);
- scanf("%d", &iInput);
- if (iInput == 4)
- break;
- switch (iInput)
- {
- case 1:
- printf("\n번호 : %d\n", iMemberCount + 1);
- fputs("이름 입력 : ", stdout);
- scanf("%s", cInputName);
- fputs("전번 입력 : ", stdout);
- scanf("%s", cInputTel);
- iSize += 40;
- mem = (Member*)realloc(mem, iSize);
- strcpy(mem[iMemberCount].m_Name, cInputName);
- strcpy(mem[iMemberCount].m_TelNUmber, cInputTel);
- iMemberCount++;
- fputs("입력 완료!\n",stdout);
- system("pause");
- break;
- case 2:
- for (int i = 0; i < iMemberCount; ++i)
- {
- printf("%d번\n", i + 1);
- printf("이름 : %s\n", mem[i].m_Name);
- printf("전번 : %s\n-------\n", mem[i].m_TelNUmber);
- }
- fputs("출력 완료!\n", stdout);
- system("pause");
- break;
- case 3:
- memset(mem, 0, iSize);
- iSize = 40;
- mem = (Member*)realloc(mem, 0);
- iMemberCount = 0;
- fputs("리셋 완료!\n", stdout);
- system("pause");
- break;
- }
- }
- // 9. 입력한 만큼 다시 내보낸다.
- fwrite((Member*)mem, iSize, 1, fp);
- fclose(fp);
- free(mem);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement