반응형
#성적처리 #파일 #읽기 #구조체 #배열 #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)
https://gonyzany.tistory.com/146
반응형
'C_C++' 카테고리의 다른 글
(C언어) 커서 위치 지정하기: gotoxy(x, y) (0) | 2022.11.14 |
---|---|
(C언어) 커서 위치 지정하기: gotoxy() (0) | 2022.11.14 |
(C언어) 줄번호를 붙여서 파일 내용 출력 (0) | 2022.11.12 |
(C언어) 구조체를 이용한 성적처리 (0) | 2022.11.12 |
(C언어) 아스키코드 ASCII Code 출력 (0) | 2022.11.11 |