파일 입출력에 관해서 알아보겠습니다.
여태까지 저희는 코드를 이용해서 화면으로 출력만 해보았습니다.
이번에는 파일에서 읽어보고 파일에 출력을 해보겠습니다.
파일 입출력의 간단한 순서입니다.
파일 포인터를 선언한 후에 위와 같은 방식으로 fopen() 함수를 사용해 열 파일의 경로와
모드를 파일 포인터에 넣어줍니다.
파일 입출력에 관련된 함수들입니다. 파일 입력 함수는 말 그대로
파일에 입력한 값을 넣어주는 함수입니다.
파일 출력 함수는 파일에 있는 문자열을 화면에 출력시켜주는 함수입니다.
fgets의 사용방법입니다.
간단한 예제를 하나 보겠습니다.
char str[20]; //19자리까지 입력 가능(null자리) FILE* rfp; rfp = fopen("c://test//data1.txt", "r"); //c드라이브의 test폴더에 data1.txt라는 파일을 읽기모드로 한다. fgets(str, 20, rfp); printf("파일에서 읽어온 문자의 내용은 : "); puts(str); fclose(rfp); return 0; |
data1.txt 파일에 있던 문자열을 가지고와서 그대로 출력해주는 코드입니다.
puts() 함수는 printf() 함수와 비슷한 역할로써 출력함수 역할을 수행합니다.
파일 포인터 rfp를 읽기모드로 열어주어 배열 str에 data1.txt파일에 있는 정보를 읽어올 수 있게 합니다.
char str[20]; FILE* wfp; wfp = fopen("c://test//data2.txt", "w"); printf("문자열을 입력해주세요 (최대 19자) : "); gets(str); fputs(str, wfp); fclose(wfp); return 0; |
쓰기모드의 예제입니다.
쓰기모드는 앞에 작성해놓은 주소에 작성한 파일명으로 파일이 만들어집니다.
fputs() 함수를 이용해 배열 str에 입력 받은 문자열을 파일 포인터 wfp를 이용해 data2.txt에 넣어줍니다.
소스 실행 후 해당 주소로 가면 data2.txt 파일에 입력한 문자열이 들어가 있는 것을 확인하실 수 있습니다.
문제 : 5개의 숫자를 입력받아 그 숫자들의 합을 data3.txt 에 저장하라. |
문제입니다. 한 번 풀어보시면 도움이 되실겁니다.
FILE* wfp; int sum = 0, num; //숫자를 입력받을 변수와 합을 저장할 변수. wfp = fopen("c://test//data3.txt", "w"); //data3.txt 파일의 주소를 파일 포인터 wfp에 저장 for (int i = 0; i < 5; i++) { printf("숫자 %d : ", i + 1); scanf("%d", &num); sum = sum + num; //숫자를 입력받아 sum에 합을 저장하는 과정을 5번 반복 } fprintf(wfp, "합은 : %d\n", sum); //wfp를 이용해 data3.txt 파일에 숫자들의 합 sum저장 fclose(wfp); //파일 닫아주기 return 0; |
해설입니다.
이제 함수의 개념에 대해 알아보겠습니다.
함수란 특정 작업을 수행하는 코드이며
크게는 C에서 제공하는 내장 함수, 사용자가 정의한 함수로 나뉩니다.
저희가 항상 사용하는 int main(void) {} 부분도 함수입니다.
함수의 구성요소입니다.
함수의 7가지 갈래중에 대표적인 4가지입니다.
반환형이 int로 선언된 함수의 경우, 정수 값을 반환해줘야 하기 때문에
return ; 이 붙지만 반환형이 void로 선언된 함수의 경우 특정 값을 반환해줄 필요가 없기 때문에
return ; 이 필요 없습니다.
예제 보겠습니다.
#include <stdio.h> int sum(int x, int y) { int result = x + y; return result; } int main(void) { int answer = 0; answer = sum(3, 4); printf("%d\n", answer); return 0; } |
두 개의 매개변수의 합을 구하여 그 합을 반환하는 함수인 sum 을 만들어 메인함수에 적용한 예제입니다.
'C 언어' 카테고리의 다른 글
C 언어 10일차 : 전역변수와 함수, 헤더파일, #define (0) | 2022.12.30 |
---|---|
C 언어 9일차 : 구조체 (0) | 2022.12.30 |
C 언어 7일차 : 동적 메모리 할당과 2차원 배열 (0) | 2022.12.28 |
C 언어 6일차 : 배열을 이용한 문자열, 배열과 관련된 함수, gets와 scanf의 차이 (0) | 2022.12.27 |
C 언어 5일차 : 배열의 주소와 포인터 (0) | 2022.12.24 |
댓글