입출력 문제입니다.
크리에이터
질문 제목 :파일 입출력과 구조체를 사용하여 첨부된 파일을 참조하여 성적처리 프로그램을 작성하라
다음과 같이 10명의 학생의 학번, 이름, 점수 3개을 입력하여 data.txt파일을 작성한다.
1홍길동807570
2오상엽806670
:
10김은숙808575
data.txt 파일을 읽어 구조체 배열을 작성하여 평균과 석차를 구하고, Result.txt 파일에 다음과 같이 결과를 출력하라.
학번이름점수1점수2점수3평균석차
1홍길동80 75 70 75 02
:
10김은숙80 72 75 80 1
소스코드 :
#include stdio.h
int main(void)
{
struct student{ //구조체 선언
int number;
char name[10];
int jum[2];
int rank;
double ave;
} s[10];
int i, j; //정수형 변수선언
FILE *fp1, *fp2; //파일형 변수 선언fp1=fopen(data.txt,r); //파일을 읽기전용으로 연다
for(i=0; i10; i++) //i는 0부터 10보다 작은동안 1씩 증가하며 반복
fscanf(fp1,%d %s %d %d %d , &s[i].number, s[i].name[10], &s[i].jum[0], &s[i].jum[1], &s[i].jum[2]);
fclose(fp1); //파일을 각각의 변수에 저장 하고 파일을 닫는다
for(i=0; i10; i++) //i는 0부터 10보다 작은동안 1씩 증가하며 반복
s[i].ave = (s[i].jum[0] + s[i].jum[1] + s[i].jum[2])/3;
//각 과목의 총합을 더하여 total에 저장
for(i=0; i10; i++) //i는 0부터 10보다 작은 동안 1씩 증가하며 반복
{
s[i].rank=1; //rank에 초기값 1을 저장
for(j=0; j10; j++) //j는 0부터 10보다 작은동안 1씩 증가하며 반복
{
if(s[i].ave s[j].ave) //s[j].ave 값이 s[i].ave 보다 크면
s[i].rank++; //s[i].rank +1을 한다
}
}
fp2=fopen(Result.txt,w); //파일을 쓰기전용으로 연다
printf( 학 번 이 름 점수1 점수2 점수3 석차 평균\n);
fprintf(fp2, 학 번 이 름 점수1 점수2 점수3 석차 평균\n);
//성적표 항목 을 콘솔및 파일에 출력
for(i=1; i=10; i++) //i는 1부터 10보다 작거나 같은동안 1씩 증가하며 반복
{
for(j=0; j10; j++) //j는 0부터 10보다 작은동안 1씩 증가하며 반복
{
if(s[j].rank==i) //각각의 등수가 i과 같으면 (즉, 1등부터 차례로 출력)
{
printf(%10d%10s%10d%10d%10d%10d%10f \n, &s[j].number, s[j].name[10], &s[j].jum[0], &s[j].jum[1], &s[j].jum[2], &s[j].rank, &s[j].ave);
fprintf(fp2, %10d%10s%10d%10d%10d%10d%10f \n, &s[j].number, s[j].name[10], &s[j].jum[0], &s[j].jum[1], &s[j].jum[2], &s[j].rank, &s[j].ave);
} //해당 사람의 성적을 콘솔및 파일에 출력
}
}
fclose(fp2); //하단 라인을 출력하고 줄내림
}질문 내용 :컴파일시 오류는 없는데 실행되면 시스템 에러창이 나오면서 닫기창이 뜨네요 이유를 모르겟습니다.
result.txt는 생성도 되지 않구요
data.txt 파일은 해당 소스 있는 폴더안에 넣어서 했습니다.
-
떠나간그녀
중간중간에 코드 오류도 좀 있는거같네요..
-
에녹
구조체를 main 함수 안에 넣으셔서 그런거 같아요.