본문 바로가기

C/C++/예제

[C 예제] 파일 입출력을 이용해 연산결과 저장하기.

반응형

C 예제.

파일 입출력을 이용해 숫자를 얻어와 연산을 하고~ 결과를 저장해보자!!




해당 예제의 목표는 

input.txt 파일안에 있는 숫자를 읽어와서 덧셈 연산을 진행하고

그 결과를 output.txt 파일에 저장하기 입니다.


그럼 바로 소스를 살펴볼까요 !?


#include 

int main()
{
    FILE *fp1;  // input.txt 를 위한 파일포인터 선언.
    FILE *fp2;  // output.txt 를 위한 파일 포인터 선언.
    // 어차피 한개 사용하고 닫고 다시 열고 할거지만..하다보니 2개 선언했네요 ^^;;
    int n1 = 0, n2 = 0; // input.txt 에서 읽어올 숫자를 저장할 변수 선언 및 0으로 초기화.
    int result = 0; // 덧셈 연산의 결과를 저장할 변수 선언 및 초기화.

    // fopen 함수를 통해 fp1 에 input.txt 파일을 읽기 모드로 오픈해줍니다.
    fp1 = fopen("input.txt", "r");
    // fp1 이 NULL 과 같다면 이건 파일이 정상적으로 오픈되지 않았다는걸 뜻합니다. ( 파일이 없거나 비정상적인 파일일경우 여기에 해당 )
    if(fp1 == NULL)
    {
        printf("input.txt File Open Error!!\n");
        return 1;
    }
 
    fscanf(fp1, "%d %d", &n1, &n2);
   // fscanf 함수를 통해 파일에 입력된 값 을 각각 n1, n2 변수에 저장.
    fclose(fp1); // 사용을 완료한 파일 닫기.

    result = n1 + n2; // 덧셈 연산 결과 저장.

    // 쓰기모드로 output.txt 파일 오픈
    fp2 = fopen("output.txt", "w");
    if(fp2 == NULL)
    {
        printf("output.txt File Open Error!!\n");
        return 1;
    }

    fprintf(fp2, "%d + %d = %d\n", n1, n2, result);
    // fprintf 함수를 이용해 쓰기 형식으로 오픈한 파일에 내가 원하는 내용( n1 + n2 = result ) 을 출력.
    fclose(fp2);  // 파일 닫기.

    printf("End..\n");

    return 0;
}



소스를 이렇게 작성하고 컴파일을 진행한뒤에,

input.txt 파일을 생성해서 숫자를 아무거나 2개 입력하고 저장해주고~
프로그램을 실행 시켜 봅시다 !!

실행이 잘되고 정상적으로 종료가 됐다면 이제 생성된 output.txt 파일을 열어봅시다.

제가 input.txt 파일에 입력한 값은 "10 20" 이였습니다.

output.txt 파일의 내용을보니

10 + 20 = 30

이렇게 정상적으로 나온것을 확인할수가 있네요.

해당 예제에 쓰인 몇개의 함수들에대한 약간의 추가적인 설명이 필요한듯하여 추가합니다.

fopen 함수.
fopen 함수는 파일을 오픈하는 함수로
두개의 인자값을 받아갑니다.
첫번째 인자값엔 오픈하고자 하는 파일명을 입력하시면 됩니다. ( 확장자도 입력. )
두번째 인자값엔 내가 파일을 오픈할때 어떤 형식으로 오픈을 할것인지에 대한 값을 입력해야 합니다.
 오픈 형식 옵션.
 r  : 읽기 모드. 파일이 없으면 NULL 을 리턴해줍니다.
w  :쓰기 모드. 파일이 없으면 새로 생성하고 파일이 있다면 덮어씁니다 ( 기존파일 내용 날아가요..).
 : append모드. 파일이 없다면 새로 생성하고 이미 파일이 존재하면 기존파일의 내용 끝부분에 file pointer가 위치해 fprintf 등을 통해 새로 쓰기 작업을 할경우 해당 위치부터 출력이 됩니다.
r+ : 읽기 + 쓰기 모드. 파일이 없으면 NULL 을 리턴해줍니다.
w+ : 읽고 쓰기 모드. 파일이 없으면 새로 만들고 있으면 기존 파일을 덮어씁니다 ( 기존파일 내용 날아가요..).
a+ : 읽고 쓰는 append 모드 파일에 출력을 할땐 a 모드로 열었을때와 동일하게 동작하며, 파일안의 내용을 읽어올수도 있습니다.
 
fscanf 함수.

fscanf 함수는 scanf 함수와 똑같다고 보시면 됩니다.

다만 다른점은 scanf 함수는 사용자로부터 키보드를 통해 입력된 값을 받아오지만,

fscanf 함수는 파일안에 있는 값을 받아온다는 것입니다.



fprintf 함수.

fprintf 함수도 printf 함수와 똑같다고 보시면 되며,
사용자가 바로 출력물을 볼수있도록 화면에 출력을 해주는 printf 함수와 다르게,
파일안에 해당 내용을 출력해준다는 점이 다릅니다.

fscanf, fprintf  두개의 함수 모두 첫번째 인자값에 파일포인터가 들어간다는 것 외에는 
scanf, printf 함수와 사용법이 동일 합니다.


반응형