[C언어] 파일 입출력

seonyoung53·2021년 7월 8일
0

C언어

목록 보기
3/6

파일을 열고 닫기

- 파일 입출력 변수는 FILE 형식의 포인터 변수로 선언
- 파일을 열 때는 fopen() 함수
- 파일을 닫을 때는 fclose() 함수
FILE*fp;
fp = fopen(파일경로, 접근방식);
// 파일관련처리
fclose(fp)
  • 가장 많이 사용되는 접근 방식
    • r : 파일에 접근하여 데이터를 읽습니다.
    • w : 파일에 접근하여 데이터를 기록합니다. (파일이 이미 존재하면 덮어쓰기)
    • a : 파일에 접근하여 데이터를 뒤에서부터 기록합니다.

  • 파일 입출력 함수
    • fprintf(파일 포인터, 서식, 형식지정자);
    • fscanf(파일 포인터, 서식, 형식지정자);

1. 특정 파일을 쓰기 모드로 생성하여 문자열 기록

#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;
}

파일 탐색기 열기 >


2. 간단한 학생 정보 시스템 만들기

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 실행

profile
비비디바비디부

0개의 댓글

관련 채용 정보