Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C 언어 파일 쓰기 모드(w) 완벽 정리: fopen과 fprintf 활용법

파일(File)은 레코드들의 집합이자, 데이터를 영구적으로 저장하는 하드 디스크상의 공간을 의미합니다.

파일이 필요한 이유

  • 프로그램이 종료되면 메모리에 있던 모든 데이터는 사라집니다.
  • 반면 파일에 데이터를 저장해 두면 프로그램이 종료된 후에도 자료가 그대로 보존됩니다.
  • 대량의 데이터를 매번 키보드로 입력하는 것은 많은 시간과 노력이 듭니다.
  • 파일을 사용하면 몇 가지 명령만으로 내용에 손쉽게 접근할 수 있습니다.
  • 데이터를 수정하지 않고도 한 컴퓨터에서 다른 컴퓨터로 쉽게 옮길 수 있습니다.
  • C 언어의 명령어를 활용하면 다양한 방식으로 파일에 접근하고 제어할 수 있습니다.

C 언어에서의 파일 연산

C 프로그래밍에서 파일에 대해 수행할 수 있는 기본 연산은 다음과 같습니다.

  • 파일 이름 지정하기
  • 파일 열기
  • 파일에서 데이터 읽기
  • 파일에 데이터 쓰기
  • 파일 닫기

기본 문법

파일 포인터 선언

FILE *파일포인터;

예시:

FILE *fptr;

파일 포인터로 파일 열기

파일포인터 = fopen("파일이름", "모드");

예시 — "sample.txt" 파일을 쓰기 모드("w")로 여는 코드입니다.

FILE *fp;
fp = fopen("sample.txt", "w");

예제 1: 학생 정보를 파일에 저장하기

다음은 n명의 학생에 대한 이름과 점수를 입력받아 파일에 저장하는 C 프로그램입니다.

#include <stdio.h>
int main(){
    char name[50];
    int marks, i, num;
    printf("Enter number of students: ");
    scanf("%d", &num);
    FILE *fptr;
    fptr = (fopen("std.txt", "w")); // 쓰기 모드로 파일 열기
    if(fptr == NULL){
        printf("Error!");
        exit(1);
    }
    for(i = 0; i < num; ++i){
        printf("For student%d\nEnter name: ", i+1);
        scanf("%s", name);
        printf("Enter marks: ");
        scanf("%d", &marks);
        fprintf(fptr,"\nName: %s \nMarks=%d \n", name, marks);
    }
    fclose(fptr);
    return 0;
}

실행 결과

위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.

Enter number of students: 3
For student1
Enter name: lucky
Enter marks: 59
For student2
Enter name: pinky
Enter marks: 89
For student3
Enter name: bob
Enter marks: 45

입력된 학생 정보는 "std.txt" 파일에 순서대로 기록되며, 프로그램이 종료된 후에도 파일을 열어 확인할 수 있습니다.

예제 2: 직원 정보 저장 후 다시 읽어 출력하기

다음은 직원의 사번, 이름, 급여를 파일에 저장한 뒤, 같은 파일을 읽기 모드로 열어 내용을 화면에 출력하는 C 프로그램입니다.

#include<stdio.h>
int main ( ){
    FILE *fp;
    int eno;
    char ename[30];
    float sal;
    fp =fopen ("emp.txt", "w"); // 쓰기 모드로 파일 열기
    printf ("enter the details of eno, ename, sal:");
    scanf ("%d%s%f", &eno, ename, &sal);
    fprintf (fp, "%d%s%f", eno, ename, sal);
    fclose (fp);
    fp = fopen ("emp.txt", "r"); // 읽기 모드로 다시 열기
    fscanf (fp, "%d%s%f", &eno, ename, &sal);
    printf ("employee no: = %d\n", eno);
    printf ("employee name = %s\n", ename);
    printf ("salary = %f\n", sal);
    fclose (fp);
    return 0;
}

실행 결과

위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.

enter the details of eno, ename, sal:1 Pinky 34000
employee no: = 1
employee name = Pinky
salary = 34000.000000

정리

C 언어에서 쓰기 모드("w")로 파일을 열면 해당 파일에 데이터를 기록할 수 있으며, 작업이 끝난 후에는 반드시 fclose() 함수로 파일을 닫아야 데이터가 안전하게 저장됩니다. 또한 같은 파일을 읽기 모드("r")로 다시 열면 저장된 내용을 fscanf()로 불러와 화면에 출력할 수 있습니다. 이처럼 fopen, fprintf, fscanf, fclose 등의 표준 입출력 함수를 조합하면 프로그램 종료 후에도 데이터를 영구적으로 보관하고 재활용할 수 있습니다.