Advertisement
Guest User

Untitled

a guest
Dec 17th, 2017
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.95 KB | None | 0 0
  1. #pragma warning(disable:4996)
  2.  
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <string.h>
  6. #define NAME_LEN 20
  7.  
  8. #pragma pack(push,1)
  9. typedef struct
  10. {
  11. char m_Name[NAME_LEN];
  12. char m_TelNUmber[NAME_LEN];
  13.  
  14. }Member;
  15. #pragma pack(pop)
  16.  
  17. int main()
  18. {
  19. Member *mem;
  20. FILE* fp;
  21.  
  22. int iSize;
  23. int iMemberCount = 0;
  24. int iInput = 0;
  25. char cInputName[NAME_LEN] = { 0 };
  26. char cInputTel[NAME_LEN] = { 0 };
  27.  
  28. // 1. FILE* fp에 rb모드로 스트림 오픈
  29. fp = fopen("BinaryTest.bin", "rb");
  30.  
  31. // 2. 파일 지시자를 파일의 끝으로 보낸다.
  32. fseek(fp, 0, SEEK_END);
  33.  
  34. // 3. iSize변수에 ftell()의 리턴값 저장. ftell() = 현재 파일 지시자가 있는 위치의 바이트를 반환한다. 즉, 현재 파일 지시자는 끝에있기 때문에 파일의 크기를 반환한다.
  35. iSize = ftell(fp);
  36.  
  37. // 4. 파일 지시자를 다시 시작점으로 보낸다.
  38. fseek(fp, 0, SEEK_SET);
  39.  
  40. // 5. iSize만큼(파일의 크기 만큼) mem에다가 동적할당. 이후 memset으로 값 모두 초기화.
  41. mem = (Member*)malloc(iSize);
  42. memset(mem, 0, iSize);
  43.  
  44. // 6. iSize만큼의 바이너리를 읽어온다.
  45. fread((Member*)mem, iSize, 1, fp);
  46.  
  47. // 7. Member구조체 1개의 크기는 40바이트이다. ( sizeof(Member)하면 40바이트 나옴 ). 때문에, iSize / 40은 구조체 1개가 된다. 그리고 구조체 1개는 멤버 1명이다.
  48. // 즉, iMemberCount에는 멤버의 수가 저장된다.
  49. iMemberCount = iSize / 40;
  50.  
  51. fclose(fp);
  52.  
  53.  
  54.  
  55. fp = fopen("BinaryTest.bin", "wb");
  56.  
  57. // 8. Mem변수 세팅 (새로운 멤버 입력, 초기화 등..)
  58. while (1)
  59. {
  60. system("cls");
  61. printf("현재 멤버 수 : %d\n", iMemberCount);
  62. puts("1. 입력");
  63. puts("2. 모든사람 출력");
  64. puts("3. 주소록 초기화");
  65. puts("4. 프로그램 종료");
  66. fputs("선택하세요 : ", stdout);
  67. scanf("%d", &iInput);
  68.  
  69. if (iInput == 4)
  70. break;
  71.  
  72. switch (iInput)
  73. {
  74. case 1:
  75. printf("\n번호 : %d\n", iMemberCount + 1);
  76. fputs("이름 입력 : ", stdout);
  77. scanf("%s", cInputName);
  78.  
  79. fputs("전번 입력 : ", stdout);
  80. scanf("%s", cInputTel);
  81.  
  82. iSize += 40;
  83. mem = (Member*)realloc(mem, iSize);
  84.  
  85. strcpy(mem[iMemberCount].m_Name, cInputName);
  86. strcpy(mem[iMemberCount].m_TelNUmber, cInputTel);
  87. iMemberCount++;
  88.  
  89. fputs("입력 완료!\n",stdout);
  90. system("pause");
  91. break;
  92. case 2:
  93. for (int i = 0; i < iMemberCount; ++i)
  94. {
  95. printf("%d번\n", i + 1);
  96. printf("이름 : %s\n", mem[i].m_Name);
  97. printf("전번 : %s\n-------\n", mem[i].m_TelNUmber);
  98. }
  99. fputs("출력 완료!\n", stdout);
  100. system("pause");
  101. break;
  102. case 3:
  103. memset(mem, 0, iSize);
  104. iSize = 40;
  105. mem = (Member*)realloc(mem, 0);
  106. iMemberCount = 0;
  107. fputs("리셋 완료!\n", stdout);
  108. system("pause");
  109.  
  110. break;
  111. }
  112.  
  113. }
  114.  
  115. // 9. 입력한 만큼 다시 내보낸다.
  116. fwrite((Member*)mem, iSize, 1, fp);
  117.  
  118. fclose(fp);
  119. free(mem);
  120.  
  121. return 0;
  122. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement