고수님들 도움이 절실합니다.
세리
질문 제목 :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
고수까지 필요한 문제가 아닌데요?
번호 | 제 목 | 글쓴이 | 날짜 |
---|---|---|---|
2694450 | while문질문입니다. (1) | 허리품 | 2025-05-11 |
2694420 | C언어 질문할게요(유니코드,자료형,버퍼,캐스트연산자) | 은새 | 2025-05-11 |
2694370 | 내일까진데 함수호출 제발 도와주세요!!!!!!!!!11 | 들찬 | 2025-05-10 |
2694339 | putchar()의 괄호 안에 int c=10;로 전에 선언된 c를 넣으면 안되는 이유에서 제가 생각한 것이 그 이유가 되는지 확인하고 싶습니다. (3) | 미르 | 2025-05-10 |
2694316 | 이 코드 어디가 잘못되었는지 고수분들 ㅠㅠ (2) | 나빛 | 2025-05-10 |
2694285 | 언어 공부하는 과정 좀 추천해주세요! (1) | 아빠몬 | 2025-05-09 |
2694258 | 카운터.. 질문입니다. (4) | 하늘빛눈망울 | 2025-05-09 |
2694229 | 단순한 질문이요 (8) | 여름 | 2025-05-09 |
2694202 | 용돈을 가지고 할 수 있는 일을 여러가지로 출력하는 방법 좀 알려주세요! (2) | 미나 | 2025-05-09 |
2694145 | 화면깜빡임을 없애고 싶은데요... (1) | 어서와 | 2025-05-08 |
2694069 | unsigned 질문입니다. | 힘차 | 2025-05-07 |
2694012 | 전공 비전공자 개발자 (10) | 말글 | 2025-05-07 |
2693984 | 오버로딩이 무엇인가요? (2) | 헛매질 | 2025-05-07 |
2693956 | PlaySound재생이 안됩니다!(C에 음악넣기) | 지존 | 2025-05-06 |
2693928 | &와 *의 사용에 관한 명확한 이해 | 제나 | 2025-05-06 |
2693903 | 반복문 설명좀요 ㅠㅠ (2) | 란새 | 2025-05-06 |
2693869 | stdio.h 는 왜 쓰는건가요? (1) | 큰꽃들 | 2025-05-06 |
2693842 | 포인터 변수의 주소값끼리 더하는 것에 대해서 질문드립니다. (1) | 진솔 | 2025-05-05 |
2693811 | 소수 출력;;;; | 화이트캣 | 2025-05-05 |
2693788 | 이런 함수는 없나요? (3) | 앤드류 | 2025-05-05 |