728x90
이 예제는 같은 프로젝트 안의 텍스트 파일을 읽어온 다음 배열에 저장한 후
평균과 합계를 계산한후 출력해주는 예제입니다
프로젝트 폴더안에 test.txt파일이 있어야 하고
내용은 다음과 같습니다
가나다 10 10 10 10 10
나가다 10 10 10 10 10
띄어쓰기와 엔터로 구분하기때문에 입력에 주의해야합니다
#pragma warning(disable:4996)//scanf 사용시 경고해제
#include<stdio.h>
#define MAN 2//사람의 명수를 정하는 매크로
int main(void)
{
FILE* pFile = fopen("test.txt", "r"); //프로젝트의 폴더에있는 test.txt파일을 read모드로 읽어온다
if (pFile == NULL)//파일이 없을때
{
//r로 읽을 때는 파일이 없을 수 있기 때문에 이렇게 널체크를 해주어야합니다.
//파일이 없으면 FILE*가 NULL 입니다.
printf("파일이 없습니다. 프로그램을 종료합니다.");
return 0;//종료
}
int sum[MAN + 1]; int ave[MAN + 1]; int kor[MAN + 1];//arr[0]번은 쓰지않게된다
int eng[MAN + 1]; int math[MAN + 1]; int his[MAN + 1];
int sci[MAN + 1];
char name[MAN + 1][10];//문자열의 크기는 10이다
//행렬크기를 1씩 늘리지않으면 Stack around the variable '????' was corrupted. 행렬사이즈를 오버해서 입력할때나오는 오류가나온다
//여기까지 와다는건 read 모드로 파일이 열린것 입니다.
int i;
for (i = 1; i <= MAN; i++) {//명수만큼 반복하게된다
fscanf(pFile, "%s %d %d %d %d %d\n", &name[i], &kor[i], &eng[i], &math[i], &his[i], &sci[i]);//텍스트 파일에서 문자를 읽어오는 함수
sum[i] = (kor[i] + eng[i] + math[i] + his[i] + sci[i]);//합계
ave[i] = (sum[i] / 5);//평균
printf("이름:%s 국어:%d 영어:%d 수학:%d 역사:%d 과학:%d 총합%d 평균 %d\n", name[i], kor[i], eng[i], math[i], his[i], sci[i], sum[i], ave[i]);
}
fclose(pFile);//파일 닫기
return 0;
}
터미널에서 결과는 다음과 같이 출력됩니다.
이름:가나다 국어:10 영어:10 수학:10 역사:10 과학:10 총합50 평균 10
이름:나가다 국어:10 영어:10 수학:10 역사:10 과학:10 총합50 평균 10
728x90
'개발 > C++기본문법' 카테고리의 다른 글
클래스의 상속과 가상함수의 예제(오버라이딩) (0) | 2023.05.16 |
---|---|
C언어에서 성적처리후 파일 입출력하기 (0) | 2023.05.10 |
scanf와 gets의 차이와 문자열 입력시 공백에 대한 해결방법 (0) | 2023.04.18 |
1~45까지의 난수를 [6]배열에 저장 후 크기대로 정렬하고 중복은 제거 (0) | 2023.04.18 |
scanf와 printf의 예제 (0) | 2023.04.17 |