이번 포스팅에서는 C언어의 파일 입출력 함수에 대해 자세히 알아보고, 이를 활용하여 성적 관리 프로그램을 만들어보겠습니다. 이 프로그램은 학생의 성적을 파일에 기록하고, 저장된 성적을 조회하는 기능을 포함합니다.
1. C언어의 파일 입출력 함수
C언어에서는 파일을 읽고 쓰기 위해 여러 가지 파일 입출력 함수를 제공합니다. 주요 함수는 다음과 같습니다.
1.1 fopen()
설명: 파일을 열거나 생성합니다. 파일을 열 때는 파일 이름과 모드를 지정해야 합니다.
모드:
"r": 읽기 전용 모드
"w": 쓰기 전용 모드 (파일이 없으면 생성, 있으면 덮어씀)
"a": 추가 모드 (파일이 없으면 생성, 있으면 끝에 추가)
"r+": 읽기 및 쓰기 모드
"w+": 읽기 및 쓰기 모드 (파일이 없으면 생성, 있으면 덮어씀)
"a+": 읽기 및 추가 모드
구문: FILE *fopen(const char *filename, const char *mode);
예제:
#include <stdio.h>
int main() {
FILE *file = fopen("example.txt", "w");
if (file == NULL) {
perror("파일 열기 오류");
return 1;
}
fprintf(file, "파일이 성공적으로 열렸습니다.\n");
fclose(file);
return 0;
}
1.2 fprintf()
설명: 파일에 형식화된 데이터를 기록합니다. printf()와 유사하게 작동하지만, 출력 대상이 파일입니다.
구문: int fprintf(FILE *stream, const char *format, ...);
예제:
#include <stdio.h>
int main() {
FILE *file = fopen("example.txt", "w");
if (file == NULL) {
perror("파일 열기 오류");
return 1;
}
fprintf(file, "이것은 fprintf() 예제입니다.\n");
fclose(file);
return 0;
}
1.3 fscanf()
설명: 파일에서 형식화된 데이터를 읽어옵니다. scanf()와 유사하게 작동하지만, 입력 대상이 파일입니다.
구문: int fscanf(FILE *stream, const char *format, ...);
예제:
#include <stdio.h>
int main() {
FILE *file = fopen("example.txt", "r");
if (file == NULL) {
perror("파일 열기 오류");
return 1;
}
char buffer[100];
fscanf(file, "%s", buffer);
printf("읽은 내용: %s\n", buffer);
fclose(file);
return 0;
}
1.4 fclose()
설명: 파일을 닫습니다. 파일 작업이 끝난 후 반드시 호출해야 하며, 열린 파일을 안전하게 종료합니다.
구문: int fclose(FILE *stream);
예제:
#include <stdio.h>
int main() {
FILE *file = fopen("example.txt", "w");
if (file == NULL) {
perror("파일 열기 오류");
return 1;
}
fprintf(file, "파일 작업 완료.\n");
fclose(file); // 파일 닫기
return 0;
}
2. 성적 관리 프로그램 구현
이제 파일 입출력 함수를 사용하여 성적 관리 프로그램을 만들어보겠습니다. 이 프로그램은 학생의 성적을 파일에 저장하고, 저장된 성적을 조회하는 기능을 포함합니다.
2.1 코드 구현
#include <stdio.h>
#include <stdlib.h>
#define MAX_STUDENTS 100
typedef struct {
char name[50];
int score;
} Student;
void save_students(Student students[], int count) {
FILE *file = fopen("students.txt", "w");
if (file == NULL) {
perror("파일 열기 오류");
return;
}
for (int i = 0; i < count; i++) {
fprintf(file, "%s %d\n", students[i].name, students[i].score);
}
fclose(file);
}
int load_students(Student students[]) {
FILE *file = fopen("students.txt", "r");
if (file == NULL) {
perror("파일 열기 오류");
return 0;
}
int count = 0;
while (fscanf(file, "%s %d", students[count].name, &students[count].score) != EOF) {
count++;
}
fclose(file);
return count;
}
void display_students(Student students[], int count) {
printf("\n저장된 학생 정보:\n");
for (int i = 0; i < count; i++) {
printf("이름: %s, 점수: %d\n", students[i].name, students[i].score);
}
}
int main() {
Student students[MAX_STUDENTS];
int count = 0;
char choice;
do {
printf("학생 정보를 입력하시겠습니까? (y/n): ");
scanf(" %c", &choice);
if (choice == 'y') {
if (count < MAX_STUDENTS) {
printf("이름을 입력하세요: ");
scanf("%s", students[count].name);
printf("점수를 입력하세요: ");
scanf("%d", &students[count].score);
count++;
} else {
printf("최대 학생 수를 초과했습니다.\n");
}
}
} while (choice == 'y');
// 학생 정보를 파일에 저장
save_students(students, count);
// 저장된 학생 정보 불러오기 및 출력
int loaded_count = load_students(students);
display_students(students, loaded_count);
return 0;
}
2.2 코드 설명
Student 구조체: 학생의 이름과 점수를 저장합니다.
save_students(): 학생 정보를 파일에 저장하는 함수입니다. 각 학생의 이름과 점수를 한 줄에 기록합니다.
load_students(): 파일에서 학생 정보를 읽어오는 함수입니다. 파일에서 읽은 데이터를 학생 배열에 저장합니다.
display_students(): 저장된 학생 정보를 출력하는 함수입니다.
main(): 사용자에게 학생 정보를 입력받고, 저장 후 파일에서 읽어 출력합니다.
2.3 실행 방법
위 코드를 C언어 컴파일러에 붙여넣고 실행합니다.
학생의 이름과 점수를 입력합니다.
입력이 끝나면 프로그램이 파일에 데이터를 저장하고, 저장된 내용을 출력합니다.
이 프로그램을 통해 C언어의 파일 입출력 기능을 이해하고, 간단한 성적 관리 시스템을 구현해보실 수 있습니다. 여러분도 다양한 기능을 추가하여 프로그램을 확장해보세요!
'IT프로그램 언어 > C 언어' 카테고리의 다른 글
C언어 기초(구조체와 공용체) (4) | 2024.11.13 |
---|---|
C언어 기초(포인터: 초보자를 위한 가이드) (0) | 2024.11.11 |
C언어 기초( 함수: 초보자를 위한 심화 가이드) (4) | 2024.11.11 |
C언어 기초(문자열 다루기) (12) | 2024.11.10 |
C언어 기초(1차원/2차원 배열) (1) | 2024.11.10 |