C_C++

(C언어) 성적처리: 파일에서 데이터 읽어 구조체에 저장하기

고니자니 2022. 11. 13. 07:59
반응형

#성적처리 #파일 #읽기 #구조체 #배열 #struct #fopen #feof

 

 

[문제]다음과 같은 조건에 맞게 프로그램을 작성합니다.

1. 구조체를 정의한다.

2. 데이터 파일에서 성적 데이터를 읽어 구조체 배열에 저장한다.

3. 데이터를 읽는 input_file() 함수를 정의한다.

4. print() 함수에서 출력한다.

 

데이터 파일의 예: data.txt

홍길동 100 100 100
이순신 99 99 99
오만원 88 77 66
오아름 95 99 98
이기자 77 88 98

 

 

 Visual Studio에서 데이터 파일 작성, 위치

비주얼스튜디오에서 데이터 파일의 위치는 소스 프로그램과 같은 위치에 작성하며,

다른 컴파일러는 대부분 실행파일이 있는 곳에 작성합니다.

비주얼스튜디오, 데이터 파일

 

C언어 코드

#define _CRT_SECURE_NO_WARNINGS   // Visual Studio
#include <stdio.h>
#define MAX	100

struct  student {
	char name[20];          // 이름
	int kor, eng, mat;      // 국어, 영어, 수학
};

void read_file(struct student list[], int* n)   // n: 인원수
{
	FILE* fp;
	int i = 0;

	if ((fp = fopen("data.txt", "r")) == NULL)
	{
		printf("File read error...\n");
		return -1;
	}

	while (!feof(fp))
	{
		fscanf(fp, "%s %d %d %d",
			list[i].name, &list[i].kor, &list[i].eng, &list[i].mat);
		i++;
	}
	*n = i;
	fclose(fp);
}

void print(struct student list[], int n)
{
	int i, tot, ttot=0;

	printf("\n이름      국어 영어 수학   평균\n");
	printf("--------------------------------\n");
	for (i = 0; i < n; i++)
	{
		tot = list[i].kor + list[i].eng + list[i].mat;
		ttot += tot;
		printf("%-10s %3d  %3d  %3d  %6.2f\n",
			list[i].name, list[i].kor, list[i].eng, list[i].mat,
			(float)tot / 3);
	}
	printf("--------------------------------\n");
	printf("전체 평균 : %.2f\n", (float)ttot / (3 * n));
}

int main()
{
	struct student list[MAX];
	int n = 0;	// 인원수
	
	read_file(list, &n);
	print(list, n);

	return 0;
}

 

 

(Data.txt)

김나라    80  70  99
서복현    84  88  77
석효정    82  83  86
이소진    92  94  62
한양대    88  79  86
허준      84  91  94
박수민   100  95  57
이인간    87  99  94
한수아    89  85  68
이준혁    98  91  99
구세주    87  89  78
서유기    86  97  92
손주현    96  77  56
전지현    90  70 100
김미영    97  75  94
성유리    89 100  52
최고다    86 100  99
김동욱    97  87  84
손권      96  93  65
오천원    92  98  91

 

(Output)

(C언어) 성적처리: 파일에서 데이터 읽어 구조체에 저장하기

 


 

https://gonyzany.tistory.com/146

 

(C언어) 구조체를 이용한 성적처리

[문제] 키보드로 이름, 국어, 영어, 수학 점수를 입력받아 평균과 전체 평균을 구하여 출력하는 프로그램을 작성하시오. (입력 데이터) 홍길동 100 100 100 이순신 99 99 99 오만원 88 77 66 오아름 95 99 98

gonyzany.tistory.com

 

반응형