수다닷컴

  • 해외여행
    • 괌
    • 태국
    • 유럽
    • 일본
    • 필리핀
    • 미국
    • 중국
    • 기타여행
    • 싱가폴
  • 건강
    • 다이어트
    • 당뇨
    • 헬스
    • 건강음식
    • 건강기타
  • 컴퓨터
    • 프로그램 개발일반
    • C언어
    • 비주얼베이직
  • 결혼생활
    • 출산/육아
    • 결혼준비
    • 엄마이야기방
  • 일상생활
    • 면접
    • 취업
    • 진로선택
  • 교육
    • 교육일반
    • 아이교육
    • 토익
    • 해외연수
    • 영어
  • 취미생활
    • 음악
    • 자전거
    • 수영
    • 바이크
    • 축구
  • 기타
    • 강아지
    • 제주도여행
    • 국내여행
    • 기타일상
    • 애플
    • 휴대폰관련
  • 프로그램 개발일반
  • C언어
  • 비주얼베이직

고수님들 도움이 절실합니다.

2gether

2023.04.01

질문 제목 :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;
}
==================================
이상 여기까지입니다
'각 함수별 숫자로 선택하여 볼수있는 방법좀 알려주세요'

신청하기





COMMENT

댓글을 입력해주세요. 비속어와 욕설은 삼가해주세요.

  • 연자두

    그럼 조언 좀 부탁드립니다 ^^

  • 단화한

    고수까지 필요한 문제가 아닌데요?

번호 제 목 글쓴이 날짜
2699763 질문입니다 ! 꼭 좀 도와주세요ㅠㅠ (2) 미라 2025-06-28
2699555 c언어 다항식을 입력을 했는데 왜 출력이 안될까요? 피스케스 2025-06-27
2699528 C언어 포인터연산 질문입니다. (3) 안녕나야 2025-06-26
2699476 끌어올림;;달력 짜봤는데요 이 소스 줄일 수 있나요? - 스샷첨부 (2) 클라우드 2025-06-26
2699444 [좀 급함] system("explorer [주소] ") 문에 변수를 사용할 수 있나요? 알 2025-06-26
2699415 파일//read//와 배열 아란 2025-06-25
2699386 구조체 안에 일부분만 char 배열에 복사하려면 어떻게 해야하나요? (1) 미즈 2025-06-25
2699361 연결리스트 정렬하는 부분에 대해서 질문 드립니다 아이처럼 2025-06-25
2699304 [기초]아직 안주무시는분 계신가요..?포인터배열? 좀 도와주세요. 놀리기 2025-06-24
2699272 printf() 함수이용해서 프로그램 만들기 질문요! (5) 다가 2025-06-24
2699221 PUSH와 POP코드를 더 간단하게 어떻게 해야할까요? 파라미 2025-06-24
2699192 설치오류가 자꾸 나요 한번봐주세여~ (1) 소녀틳향기 2025-06-23
2699161 for loop안에 있는 if문 (9) Orange 2025-06-23
2699105 링크더리스트 이전 링크값 출력함수. 꼬꼬마 2025-06-23
2699078 정수를 한자리씩 배열에 담는 법은 어떻게 하나요.. (4) 귀염포텐 2025-06-22
2699024 C언어 공부하려는데 도와주세요!!! (2) 달님 2025-06-22
2698994 날짜 계산하는 C 코드 짜고 있는데 꽉 막혀서 질문드립니다.. (6) 별 2025-06-22
2698967 파일삭제 윈도우 폴더까지 접근하게하는 함수가 뭔가요 (2) 샤인 2025-06-21
2698938 c언어 메모리질문 (3) 나래 2025-06-21
2698909 서비스 요청 고객 관리 프로그램 짜는것좀 도와주세요ㅜㅜ (4) 궁수자리 2025-06-21
<<  이전  1 2 3 4 5 6 7 8 9 10  다음  >>

수다닷컴 | 여러분과 함께하는 수다토크 커뮤니티 수다닷컴에 오신것을 환영합니다.
사업자등록번호 : 117-07-92748 상호 : 진달래여행사 대표자 : 명현재 서울시 강서구 방화동 890번지 푸르지오 107동 306호
copyright 2011 게시글 삭제 및 기타 문의 : clairacademy@naver.com