관리 메뉴

History

[C언어][Q&A] fread의 반복횟수에 대하여 본문

C,C++/개념 실습 프로그래밍

[C언어][Q&A] fread의 반복횟수에 대하여

luckybee 2023. 1. 14. 19:55
728x90
반응형

질문:

 안녕하세요. do it c언어 책에 있는 반복 횟수 관련 설명이 잘 이해되지 않습니다.(p.521~522) 20바이트 배열을 4바이트씩 5번 파일에서 read 한 것과 20바이트로 1번 파일에서 read 한 것이 동일한 결과가 나오는 건가요? 

 

 

답변: 

네 맞습니다. 20바이트 배열을 4바이트씩 5번 파일에서 read한 것과 20바이트로 1번 파일에서 read 한 것이 동일한 결과가 나옵니다. 아래 코드를 보시면 이해가 잘 될 겁니다.

#include<stdio.h>
#pragma warning(disable:4996)

int main()
{
   int a=100;                  // int 안에 100 대입
   int data[5] = {1,2,3,4,5};  // 1,2,3,4,5가 들어있는 int 배열
   int temp[5] = {};           // 초기화만 시킨 int 배열
   
   FILE* p_fp = fopen("1.dat", "wb");  //1.dat 파일을 바이너리 쓰기모드로 연다.
   
   if (p_fp){  //정상적으로 쓰기모드가 완료됐다면 if 조건 안에 들어온다.
      fwrite(&a, sizeof(int), 1, p_fp);   //변수 a의 주소를 4바이트로 1번 쓴다.
      fwrite(&data, sizeof(int), 5, p_fp);//그 뒤에 data 배열의 주소를 4바이트로 5번 쓴다.       
   }
   fseek(p_fp, 0, SEEK_SET);  // 파일 포인터를 다시 원점으로 되돌린다.
   FILE* p_fp2 = fopen("1.dat", "rb");  //1.dat 파일을 바이너리 읽기모드로 연다.
   if (p_fp2){  //정상적으로 읽기 모드가 되었다면 if 안으로 들어온다.
      //fread(&temp, sizeof(data), 1, p_fp2);    //20바이트를 1번만 읽었을 때의 값 100 1 2 3 4
      fread(&temp, sizeof(int), 5, p_fp2);       //4바이트를 5번 읽었을 때의 값 100 1 2 3 4
      //두 fread는 같다.


      for (int i = 0; i < 5; i++) {
         printf("%d ", temp[i]);     //출력해서 확인한다.
      }

   }
   fclose(p_fp);
   fclose(p_fp2);   //파일 포인터를 열었으면 둘 다 닫아준다.
}
728x90
반응형
Comments