티스토리 뷰

파일 변환 프로그램을 만듭니다.

텍스트 파일에 저장된 8자리 정수 10개를 입력하여 바이너리 파일로 출력합니다.

그리고 입력한 파일과 출력한 파일의 바이트 수를 화면에 표시합니다.

입력 파일은 메모장 프로그램으로 숫자를 한 줄에 하나씩 작성하며,

마지막 숫자를 입력한 후에도 엔터를 쳐서 줄이 바뀌도록 작성합니다.

 

실행결과는 다음과 같습니다.

/*
실행결과

입력 파일의 크기 : 100바이트
출력 파일의 크기 : 40바이트
*/
a.txt 입력 파일 b.txt 바이너리 파일
10000000
20000000
30000000
40000000
50000000
60000000
70000000
80000000
90000000
12345678

00000000100110001001011010000000...









다음은 제가 작성한 코드입니다.

지금까지 실전문제를 접하면서 처음 완벽하게 풀지 못한 것 같습니다.

#include <stdio.h>

int main(void)
{
	FILE* fpA, * fpB;

	fpA = fopen("a.txt", "r");
	if (fpA == NULL)
	{
		printf("파일을 열지 못했습니다.\n");
		return 1;
	}

	fpB = fopen("b.txt", "wb");
	if (fpB == NULL)
	{
		printf("파일을 생성하지 못했습니다.\n");
		return 1;
	}

	int sizeA = 0, sizeB = 0;
	while (1)
	{
		int num, res;
		
		res = fscanf(fpA, "%d", &num);
		if (res == EOF) break;
		fgetc(fpA);


		printf("%d\n", num);
		sizeB += fwrite(&num, 1, sizeof(num) * 1, fpB);
	}

	fclose(fpA);
	fclose(fpB);

	fpA = fopen("a.txt", "r");
	while (1)
	{
		int res;
		res = fgetc(fpA);
		if (res == EOF) break;
		sizeA += 1;
	}
	fclose(fpA);
	
	printf("입력 파일의 크기 : %d바이트\n", sizeA);
	printf("출력 파일의 크기 : %d바이트\n", sizeB);
	return 0;
}

/*
실행결과

10000000
20000000
30000000
40000000
50000000
60000000
70000000
80000000
90000000
12345678
입력 파일의 크기 : 90바이트
출력 파일의 크기 : 40바이트

*/

a.txt 입력 파일의 크기를 어떻게 구하면 좋을지 좋은 생각이 떠오르지 않았습니다.

fwrite 함수가 읽어들인 데이터의 개수를 반환한다는 것을 이용하고도 싶었습니다.

하지만 fwrite 함수는 텍스트 파일에는 쓸 수가 없기 때문이 다른 방법을 생각해야 했습니다.

결국 a.txt 파일을 다시 개방하여 문자 하나씩을 다 읽어가면서 크기를 계산했습니다.

 

문제에는 a.txt파일의 크기가 100바이트라고 나와있고, 실제 a.txt 파일의 속성을 확인해 봐도 100바이트가 맞습니다.

그런데 안에 내용을 보면 분명 한 줄에 숫자 8개와 개행문자가 있고,

그게 총 10줄이 있으니 90바이트가 돼야 맞지 않나하는 생각이 들었습니다.

이 부분은 왜 100바이트로 계산이 되는지 전혀 알지 못하겠습니다.

 

이번 문제는 이렇게 풀고 마무리해야 할 것 같습니다.

'공부 일지 > C언어 공부 일지' 카테고리의 다른 글

파일 입출력 실전문제3  (0) 2021.02.04
파일 입출력 실전문제2  (2) 2021.02.01
다양한 파일 입출력 함수  (0) 2021.02.01
파일 입출력  (0) 2021.02.01
사용자 정의 자료형 실전문제2  (0) 2021.01.31
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함