파일을 열고 닫기
- 파일 입출력 변수는 FILE 형식의 포인터 변수로 선언 - 파일을 열 때는 fopen() 함수 - 파일을 닫을 때는 fclose() 함수
FILE*fp;
fp = fopen(파일경로, 접근방식);
// 파일관련처리
fclose(fp)
- 가장 많이 사용되는 접근 방식
- r : 파일에 접근하여 데이터를 읽습니다.
- w : 파일에 접근하여 데이터를 기록합니다. (파일이 이미 존재하면 덮어쓰기)
- a : 파일에 접근하여 데이터를 뒤에서부터 기록합니다.
- 파일 입출력 함수
- fprintf(파일 포인터, 서식, 형식지정자);
- fscanf(파일 포인터, 서식, 형식지정자);
#define _CRT_SECURE_NO_WARNINGS
// 파일 입출력 또한 입력으로 보기때문에 컴퓨터가 안좋을 수 있는 공격을 받을 수도 있기 때문에
// 보안적으로 신경써야하는 부분이므로 _CRT_SECURE_NO_WARNINGS 정의
#include <stdio.h>
int main(void) {
char s[20] = "Hello World";
FILE* fp;
fp = fopen("temp.txt", "w");
fprintf(fp, "%s\n", s);
fclose(fp);
return 0;
}
파일 탐색기 열기 >
1️⃣ 학생들의 이름과 성적 파일 만들기
2️⃣ 학생 구조체 선언하기
3️⃣ 학생 데이터를 읽어 그대로 출력하기
#define _CRT_SECURE_NO_WARNINGS
// 파일 입출력 또한 입력으로 보기때문에 컴퓨터에 안좋을 수 있는 공격을 받을 수도 있기 때문에
// 기본적으로 보안적으로 신경써야하는 부분이므로
#include <stdio.h>
#include <stdlib.h>
#include <string.h> // 원시적인 C언어 인 경우 반드시 넣어주기
typedef struct {
char name[20];
int score;
} Student;
int main(void) {
int n, sum = 0;
FILE* fp;
fp = fopen("input.txt", "r"); // 읽기모드로 열기
fscanf(fp, "%d", &n); // fscanf(파일 포인터, 서식, 형식지정자)
// 특정한 파일로 부터 하나의 정수형 변수 읽기
Student* students = (Student*)malloc(sizeof(Student) * n);
// 총 n명의 학생에 대한 정보가 담길 수 있는 메모리 할당
for (int i = 0; i < n; i++) {
fscanf(fp, "%s %d", &((students + i)->name), &((students + i)->score));
printf("이름: %s, 성적: %d\n", (students + i)->name, (students + i)->score);
}
system("pause");
return 0;
}
솔루션 빌드 >> C:\C++\1강\1강\Debug 주소 >> 1강.exe 실행
4️⃣ 성적 평균을 구하고 메모리 할당 해제하기
typedef struct {
char name[20];
int score;
} Student;
int main(void) {
int n, sum = 0;
FILE* fp;
fp = fopen("input.txt", "r");
fscanf(fp, "%d", &n);
Student* students = (Student*)malloc(sizeof(Student) * n);
for (int i = 0; i < n; i++) {
fscanf(fp, "%s %d", &((students + i)->name), &((students + i)->score));
}
for (int i = 0; i < n; i++) {
sum += (students + i)->score;
// 학생들의 정보는 Student 구조체에 들어가 있으니까
// 구조체 포인터에 하나씩 접근을 해서
// 각각의 학생들에 대한 스코어 값을 sum에 더해질 수 있도록
}
free(students); // 할당 해제
fclose(fp);
printf("점수 평균: %.2f\n", (double)sum / n); // 소수점 두번째자리까지 출력될 수 있도록
system("pause");
return 0;
}
솔루션 빌드 >> C:\C++\1강\1강\Debug 주소 >> 1강.exe 실행