C 언어 - 파일 다루기3 - 파일 출력(파일의 데이터 읽기)

컴퓨터/C

728x90
반응형

파일의 데이터를 읽어봅시다.

본문에서는 다양한 형태로 저장되어있는 파일의 데이터를 읽어 프로그래머가 만든 프로그램 위로 올려 보는 파일의 출력 함수들에 대하여 알아보겠습니다.

 

  •  fgetc() 함수
    • 파일 스트림을 통해 문자 하나를 파일에서 읽어 오는 함수 입니다.
  • fgets() 함수
    • 파일 스트림을 통해 문자열을 일거 들이는 함수입니다.
  • fscanf() 함수
    • 파일 스트림을 통해 다양한 서식 변환 문자를 이용하여 문자열을 읽어 들이는 함수입니다.

파일 예제 파일 안에 아래와 같은 데이터가 있다고 가정하고 시작하겠습니다.

 

 

fgetc() 함수

fgetc함수를 통해 파일에서 문자 하나를 읽어 오는 함수입니다.

함수의 원형은 다음과 같습니다.

#include <stdio.h>
int fgetc(FILE *stream);
  • 파일 스트림에서 문자를 읽어 옵니다. 예제는 아래와 같습니다.
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main()
{
	//파일 스트림 생성
	FILE* file = fopen("Test.txt", "rt");

	char ch;
	if (file != NULL)
	{
		//ch 변수를 통해 문자를 하나씩 읽어 옴
		ch = fgetc(file);
		printf("%c", ch);
	}
    retrun 0;
 }

문자를 하나 읽어오는 것을 확인할 수 있습니다. 이를 추가적으로 응용해 while문을 사용한다면 아래와 같습니다.

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main()
{
	//파일 스트림 생성
	FILE* file = fopen("Test.txt", "rt");
	char ch;
	if (file != NULL)
	{
		while (1)
		{
			//ch 변수를 통해 문자를 하나씩 읽어 옴
			ch = fgetc(file);
			if (ch == EOF) // 만약 파일의 끝 이라면 읽어오기 종료
			{
				break;
			}
			printf("%c", ch);
		}
	}
	return 0;
}

  • EOF (파일의 끝)을 만나기 전까지 문자를 하나씩 읽어오면 파일 안의 데이터를 모두 취득할 수 있습니다.
  • 여기서 특이한 점은 줄 바꿈이 동일하게 된다는 것입니다 즉 서식 문자 또한 문자로 읽어오는 것입니다.

fgets() 함수

파일로부터 문자열을 읽어오는 함수입니다.

#include<stdio.h>
char *fgets(char* restrict s, int n, FILE* restrict stream)
  • 첫 번째 인자에는 파일에서 읽어온 문자열을 담을 공간
  • 두 번째 인자에는 읽어올 문자의 크기 
  • 세 번째 인자에는 파일 스트림
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main()
{
	//파일 스트림 생성
	FILE* file = fopen("Test.txt", "rt");
	char charr[100];
	if (file != NULL)
	{
		fgets(charr, 3, file);
		printf("%s", charr);
	}
	return 0;
}

C언어에서 문자열의 마지막은 '\0'(널문자)가 포함되므로 3개의 문자를 합친 문자열을 추출하면 위와 같은 결과가 나옵니다.

그렇다면 100개를 읽어오라고 한다면 어떤 결과가 나오는지 보도록 하겠습니다.

	if (file != NULL)
	{
		fgets(charr, 100, file);
		printf("%s", charr);
	}

위의 결과로 봤을 때 파일을 읽어오면 줄 넘김 형식 지정자를 읽는  다면 최대 개수와 상관없이 함수를 종료하는 것을 알 수 있습니다.

 

fscanf() 함수

서식 변환 문자를 이용하여 문자를 읽어오는 함수입니다.

#include <stdio.h>
int fscanf(FILE* restrict stream, const char* restrict format,...);
  • scanf와 사용 방식은 유사합니다.
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main()
{
	//파일 스트림 생성
	FILE* file = fopen("Test.txt", "rt");
	char charr[100];
	if (file != NULL)
	{
		fscanf(file, "%s",charr);
		printf("%s",charr);
		fscanf(file, "%s",charr);
		printf("%s",charr);
		fscanf(file, "%s", charr);
		printf("%s", charr);
	}
	return 0;
}

표준 입력인 scanf와 유사합니다. 이런 식으로 본문에서는 파일에서 데이터를 읽어오는 방법에 대하여 알아보았습니다.

728x90
반응형

Commnet

G91개발일지

Gon91(지구일)

91년생 공학엔지니어의 개발일지

TODAY :

YESTER DAY :

TOTAL :