고수님들 도움이 절실합니다.
세리
질문 제목 :txt자료를 받아 성적 처리 하는 방법입니다.질문 요약 :대충 코딩은 했는데연결부에서 대체 어떻게 진행해야될지 막막합니다.
조언좀 부탁드리겠습니다.
질문 내용 :
문제내용은 이렇습니다
1.fio.c에서 성적이 저장되어있는 record.txt를 할당 받습니다.
2.할당받은 점수로 show_rec.c에 각학생의 점수의 합,평균을 보여줍니다.
3.그리고 switch 함수를 이용하여서 각과목의 합(each_sum.c), 각 과목의 평균(each_avg.c)
, 전체 과목의 오름차순 내림차순(sort_avg_or_sum_pre_or_post_order.c)을 볼수있도록
해야하는데 게속 오류가 발생하고 번호 선택을 통한 각함수로의 이동은 어떻게 해야하는지
잘모르겠습니다
-고수님들 많은 조언 부탁드리겠습니다-
//각 함수별 소스는 올려놓겠습니다
==================================================================================
fio.c
==================================================================================
#include fio.h
#define MAX_LINE 80
record rec[10];
int main()
{
FILE *ifp;//포인터형 변수를 선언했다(파일은 연속적인 정보의 집합이라서첫번째 주소를 알려줘야하기 때문에 )
int cnt = 0;
char str[MAX_LINE] = ;
ifp = fopen(D:\\project\\record.txt,rw);
//D드라이버 : 구분자 프로그래밍 폴더 안에있는 ko.txt파일을 여는데 r은 읽기전용 w는 쓰기전용 으로 열고
//ifp 에 위치를 저장하겠다.
//한 라인을 읽는다는것은 처음부터 끝라인까지 읽겠다.
while (!feof(ifp)) {//파일 5줄을 읽기위해 while 사용 feof는 end of file 파일의 끝인지아닌지 유무를 판단.검사
//파일의 끝을 가르킬때 종료해야하기때문에 ! not을 붙힌다.
fgets(str,MAX_LINE,ifp);//파일을 읽기위해서 사용을하는 것은 fgets다 f는 file이다.
//파일을 넣기위해 사용하는 것은 fputs 다
//3개의 변수를 지정 str 문자 배열 파일에서 읽어온 데이터를 저장하겠다.
//얼마나 넣을것인지 크기에 대한 정보를 입력하는것을 MAX_LINE 이다 80으로 지정했다.
//기본적인 한라인의 collum의 개수는 80이다.
//세번째 ifp는 파일의 시작위치를 알려주는 것이다.
//결국 3,어디에서 2,얼마만큼 파일을 1,어디로 가져올 것이지를 알려주는 것이다.
#ifdef DEBUG//ifdefine 조건 컴파일 구문 이라고 한다.
printf(str : %s\n,str);//DEBUG라는 매크로가 지정되었을때에만 printf함수를 실행 시키겠다.
//한줄을 읽었는데 제대로 읽었는지 유무를 알기위해서 DEBUG를 사용하여 확인 할 수있다.
//지정되어있지 않으면 사용되자않는다.
#endif//조건 컴파일 구문이 끝나는것을 알려주는것이다.endif는.
if(cnt == 0){
++cnt;
continue;
}
mark_rec(&rec[cnt-1],str);
++cnt;
}
show_rec((record*)&rec, cnt-2);
each_sum((record*)&rec, cnt-2);
each_avg((record*)&rec, cnt-2);
return 0;
}
=================================================================================================
fio.h
=================================================================================================
#include stdio.h
#include string.h
#include stdlib.h//fio.c라는 file 이 정의 되어있기때문에.
//#define DEBUG
typedef struct record{
char name[20];
unsigned short kor;
unsigned short eng;
unsigned short math;
unsigned short hist;
void (*rec_func) (void);
} record;
int mark_rec(record *rec, char *str);
void show_rec(record *rec, int rec_cnt);
void func_test(void);
void sort_avg_or_sum_pre_or_post_order(record *rec,int rec_cnt);
int each_sum(record *rec, int rec_cnt);
int each_avg(record *rec, int rec_cnt);
===============================================================
mark_rec.h
==========================================
#include fio.h
int mark_rec(record *rec, char *str)
{
char *token;
char delim[]=\t\n;
int tmp[4] = {0, };//4개의 tmp로 이루어진 배열
int cnt = 0;
token = strtok(str,delim);
strcpy(rec-name,token);
while((token = strtok(NULL,delim)) !=NULL){//80이라는 문자열이 token 에 저장되어있다.
tmp [cnt++] = atoi(token);//atoi는askii to int 문자 80을 숫자 80으로 바꿔주는 함수이다.
} //읽힌 점수를 tmp 란 변수에 차례로 저장하고있다.
rec-kor = tmp[0];
rec-eng = tmp[1];
rec-math = tmp[2];
rec-hist = tmp[3];
#ifdef DEBUG
printf(%s, %d, %d, %d, %d\n,rec-name, rec-kor, rec-eng, rec-math, remath, rec-hist);
#endif
return 0;
}
=====================================
show_rec.c
========================================
#include fio.h
void show_rec(record *rec,int rec_cnt)
{
int i;
int sum = 0;
float avg = 0.0;
printf(==================================================================\n);
printf( NAME\t KOR\t ENG\t MATH\t HIST\t SUM\t AVG\n);
printf(==================================================================\n);
for(i = 0 ; i rec_cnt ; i++)
{
sum = rec[i].kor + rec[i].eng + rec[i].math + rec[i].hist;
avg = sum / 4.0;
printf(%10s\t %3d\t %3d\t %3d\t %3d\t %3d\t %3.2f\n, rec[i].name,
rec[i].kor, rec[i].eng, rec[i].math, rec[i].hist, sum, avg);
printf(\n);
}
printf(==================================================================\n);
printf(자료를 선택하세요.\n);
printf(1.과목별 합산 점수.\n);
printf(2.과목별 평균.\n);
printf(3.등수\n);
scanf(%d);
return ;
}
========================================
each_sum.c
==========================================
#include fio.h
int each_sum(record *rec, int rec_cnt)
{
int sum = 0;
int i,a;
puts(과목을 선택하세요.);
puts(1.kor);
puts(2.eng);
puts(3.math);
puts(4.hist);
scanf(%d,&a);
switch(a)
{
case 0:
break;
case 1:
{
for(i=0 ; i4 ; i++)
sum += rec[i].kor;
printf(kor의 총 합은 %d입니다.\n,sum);
break;
}
case 2:
{
for(i=0 ; i4 ; i++)
sum += rec[i].eng;
printf(eng의 총 합은 %d입니다.\n,sum);
break;
}
case 3:
{
for(i=0 ; i4 ; i++)
sum += rec[i].math;
printf(math의 총 합은 %d입니다.\n,sum);
break;
}
case 4:
{
for(i=0 ; i4 ; i++)
sum += rec[i].hist;
printf(hist의 총 합은 %d입니다.\n,sum);
break;
}
return 0;
}
============================================
each_avg.c
============================================
#include fio.h
float each_avg(record *rec, int rec_cnt)
{
int sum = 0;
float avg = 0;
int i,a;
puts(과목을 선택하세요.);
puts(1.kor);
puts(2.eng);
puts(3.math);
puts(4.hist);
scanf(%d,&a);
switch (a)
{
case 0:
break;
case 1:
{
for(i=0 ; i4 ; i++)
sum += rec[i].kor;
avg = sum/4.0;
printf(kor의 평균은 %f입니다.,avg);
}
case 2:
{
for(i=0 ; i4 ; i++)
sum += rec[i].eng;
avg = sum/4.0;
printf(eng의 평균은 %f입니다.,avg);
}
case 3:
{
for(i=0 ; i4 ; i++)
sum += rec[i].math;
avg = sum/4.0;
printf(math의 평균은 %f입니다.,avg);
}
case 4:
{
for(i=0 ; i4 ; i++)
sum += rec[i].hist;
avg = sum/4.0;
printf(hist의 평균은 %f입니다.,avg);
}
}return 0;
}
=================================================
sort_avg_or_sum_pre_or_post_order.c
==================================================
#include fio.h
void swap(int *x,int *y);
int sort_avg_or_sum_pre_or_post_order(record *rec, int rec_cnt)
{
int i,j;
for(i = 0; i 3; i++)
{
for(j = i+1; j 4; j++)
{
if(rec[i].eng rec[j].eng)
swap(&rec[i].eng, &rec[j].eng);
}
}
for ( i=0;i4; i++)
{
printf(rec[%d] = %d\n, i , rec[i]);
}
return 0;
}
void swap(int *x,int *y)
{
int tmp;
tmp = *x;
*x = *y;
*y = tmp;
}
==================================
이상 여기까지입니다
'각 함수별 숫자로 선택하여 볼수있는 방법좀 알려주세요'
-
연체리 2024-05-19
그럼 조언 좀 부탁드립니다 ^^
-
영글 2024-05-19
고수까지 필요한 문제가 아닌데요?
번호 | 제 목 | 글쓴이 | 날짜 |
---|---|---|---|
2676005 | keybd_event 게임 제어 | 영글 | 2024-11-23 |
2675900 | 진짜기본적인질문 | 글길 | 2024-11-22 |
2675845 | 수정좀해주세요ㅠㅠㅠ | 해골 | 2024-11-21 |
2675797 | 병합 정렬 소스 코드 질문입니다. (2) | 도래솔 | 2024-11-21 |
2675771 | 큐의 활용이 정확히 어떻게 되죠?? | 해긴 | 2024-11-21 |
2675745 | 도서관리 프로그램 질문이요 | 도리도리 | 2024-11-20 |
2675717 | 2진수로 변환하는것! (3) | 동생몬 | 2024-11-20 |
2675599 | for문 짝수 출력하는 법 (5) | 널위해 | 2024-11-19 |
2675575 | Linux 게시판이 없어서.. | 첫삥 | 2024-11-19 |
2675545 | 구조체 이용할 때 함수에 자료 넘겨주는 것은 어떻게 해야 하나요? | 아연 | 2024-11-19 |
2675518 | 사각형 가로로 어떻게 반복해서 만드는지좀.. 내용 | 신당 | 2024-11-18 |
2675491 | !느낌표를 입력하는것은 어떻게합니까~~?ㅠㅠ (5) | 사지타리우스 | 2024-11-18 |
2675411 | 파일입출력으로 받아온 파일의 중복문자열을 제거한 뒤 파일출력 | 앨버트 | 2024-11-17 |
2675385 | 링크드리스트 주소록 질문드립니다. (1) | 겨루 | 2024-11-17 |
2675356 | 2진수를 10진수로 바꾸려고 하는데 막히네요.. | 풀잎 | 2024-11-17 |
2675297 | Prity 비트 발생기 | 한란 | 2024-11-16 |
2675249 | C책 좀 추천해 주세요 (2) | 딸기우유 | 2024-11-16 |
2675193 | 연습문제 17-1 질문입니다. | 한별나라 | 2024-11-15 |
2675172 | 소스점 | 아이뻐 | 2024-11-15 |
2675146 | 단순 연결 리스트인데 출력결과가 이상하게 나와요. | 찬늘봄 | 2024-11-15 |