인공지능 개발일지

[C언어] 파일 입출력 본문

개발 지식/C,C++

[C언어] 파일 입출력

Prcnsi 2021. 6. 2. 23:59
728x90

안녕하세요! 이번 시간에는 C언어의 파일 입출력에 관해 알아봅시다.

저는 처음에 입출력을 배울 때 굉장히 헷갈렸는데

확실히 여러 번 쓰면서 익숙해지면 

괜찮다는 걸 느낀 내용입니다.

이를 바탕으로 한 번 간단하게 정리해 봤습니다.

 

 

 


 

 

먼저 get은 입력 put은 출력임을 알고 읽으면 도움이 될 것 같습니다.

기본적인 파일 입출력은 아래 4가지만 알면 됩니다.

 

  • 파일 시작
  • 입력
  • 출력
  • 종료

 

1.파일 시작

  파일 시작은 아래 두 줄로 시작합니다.

FILE *(파일 포인터);
(파일 포인터)=fopen("파일명","모드");

 파일명은 절대경로와 상대경로 모두 지원합니다.

 이때 지정한 파일이 존재하지 않는다면 생성해준다.

 

 

 주요 모드는 아래와 같이 세 가지가 있습니다.

r(read) 읽기
w(write) 쓰기
a(append) 추가

 

 

 

2.입력

 여기서 입력은 파일에서 입력을 받는 것을 의미합니다. 

 키보드로 입력 받던 것들을 파일에서 입력 받는 것이지요.

 상황에 따라 아래 세 가지 중에 골라 쓰면 됩니다.

1.(값을 저장할 변수)=fgetc(파일 포인터)

fgetc 이듯이 한 단어를 입력 받습니다.

 

 

예를 들어 아래와 같이 hello.txt라는 파일이 있을 때 이를 fgetc를 이용하여 읽어온다면 어떻게 될까요?

hello.txt

이를 아래 코드로 읽어서 출력해 보았습니다.

코드

그랬더니 아래와 같이 한 단어씩 출력되었습니다.

결과

이를 통해 getc는 개행문자가 \n이 아니고

 입력 받을 때 차례로 한 단어씩 입력 받아 옴을 알 수 있다.

 

 

 

2.fgets(값을 저장할 배열,배열의 사이즈,파일 포인터)

이는 fgets 이듯이 string을 입력 받습니다.

주의할 것은 개행문자로 이는 한 줄 단위로 읽어온다는 것입니다.

 

 

 

예를 들어 위 fetc에서 예제와 같은 hello.txt 파일을 읽을 때  fgets를 반복문으로 돌리면

어떻게 될까요?

fgets코드

돌리면 아래와 같이 한 단어씩 입력을 받습니다.

이를 통해 fgets는 한 줄씩 값을 읽어 옴을 알 수 있습니다.

fgets 결과

 

 

 

 

 

3.fscanf(파일 포인터,형식 지정자,저장 받을 변수)

scanf 사용법에서 첫 번째 인자로 파일 포인터를 준다는 것 외에는 동일합니다.

 

그러니까 위에서 빨간 글씨를 제외한 (형식 지정자,저장 받을 변수)는 printf(형식 지정자,저장 받을 변수)와 

같다는 말입니다.

 

 

마찬가지로 위의 hello.txt 파일에서 입력 받는 코드는 아래와 같습니다.

fscanf 코드

이를 실행하면 아래와 같습니다.

결과

눈치 채셨나요? 네 맞습니다.fgetc와 fgets와 다르게 fscanf는 개행문자를 신경쓰지 않아도 되고

형식을 자유자재로 정할 수 있다는 장점이 있습니다.

따라서 상황에 맞게 필요한 함수를 사용하면 됩니다.

 

 

 

 

3.출력

개인적으로 입력보다는 출력이 이해가 쉬웠습니다.

출력함수 또한 세 가지가 있습니다.

1.fputc(파일에 넣을 값,파일 포인터);

fputc 이듯이 단어를 입력합니다.

 

 

예를 들어 아래는 Sunday.txt라는 함수에 1,2,3 을 입력하는 코드입니다.

fputc 코드

 

위 코드의 실행결과를 파일에 잘 입력 되었는지 확인해 보았습니다.

Sunday.txt

뭔가 이상한 것을 느끼셨나요? 네 맞습니다. fputc는 기본적으로 다닥다닥 바로 붙어서 출력됩니다.

따라서 행을 바꾸고 싶으면 아래와 같이 직접 공백을 입력해 줘야 합니다.

fputc('\n',fp);

 

 

 

2.fputs(파일에 넣을 배열,파일 포인터)

fputs 이듯이 문장을 입력합니다.

 

예시로는 Sunday 라는 파일에 "hello world" 를 출력하고 싶으면 아래와 같이 

코드를 작성합니다.

fputs 코드

실행하고 파일을 확인해 보면 잘 저장된 것을 확인할 수 있습니다.

fputs 결과

 

3.fprintf(파일 포인터,입력할 것,대응되는 값)

 fprint는 fscanf와 마찬가지로 파일포인터를 제외한 (입력할 것,대응되는 값)은 

 printf(입력할 것,대응되는 값)과 동일합니다.

 

예를 들어 old 에 저장된 21과 year에 저장된 2021을 출력하는 코드는 아래와 같습니다.

fprintf 코드

 

파일을 들어가보면 잘 출력됩니다.

fprintf 결과

fprintf도 fscanf처럼 형식을 자유롭게 지정할 수 있습니다.

 

 

 

4.종료

fclose(파일 포인터);

파일을 닫는 코드는 위와 같이 간단합니다.

 

 

 

 


 

어떠신가요? 잘 이해가 되나요?

이상으로 파일 입출력 포스팅을 마무리 하겠습니다.

다음으로는 포인터에 관한 포스팅을 들고 오겠습니다.

감사합니다!

 

 

 

https://holdemfocus.run.goorm.site/

 

홀덥펍 창업 홀덤포커스 | 홀덤포커스 | 홀덥펍 프랜차이즈 | 홀덥펍 | 홀덥펍 창업 | 프랜차이즈

Contact Us Phone: 010-8700-2129Address: 부산시 부산진구 중앙대로680번가길 74, 5층

holdemfocus.run.goorm.site

 

728x90

'개발 지식 > C,C++' 카테고리의 다른 글

[C++] 벡터, 스택, 큐 사용법과 차이  (0) 2023.05.02
[C언어] 포인터 사용 법  (0) 2021.06.18
[C언어] 구조체  (0) 2021.06.15
[C언어] 배열의 A-Z까지,  (0) 2021.06.13
[C언어] 헤더파일과 전처리기  (2) 2021.06.10