Turbo-C
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
터보-C 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
Lua 게시판
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C/C++ Q/A
[2536] 구조체 문제인데요, 정말 맘이 급해서...제발좀 봐주세요!
구조체 초보 [] 1136 읽음    2003-05-02 21:36
res0105.txt 32.2KB res0105.txt파일입니다.
안녕하세요.
제발 봐주십사하고 염치불구 질문드립니다.

텍스트파일로부터 지도코드가 B또는 C인 자료에 대해 국어점수+영어점수에 따라 내림차순 했을 때 5번째 국어점수+영어점수를 출력하는 문젭니다. 근데 점수가 동일한 경우 학번에 대해 오름차순 정렬합니다.

문제는 실행도 되고 정렬도 되던데 과목별 점수부분의 데이타가 파괴되어 나옵니다.


#include <stdio.h>
#define MAX 1000  /*데이타가 총 1000행이더군요 */
void an1(void);
FILE *IN, *OUT;
struct tag{
        long int stuno;        /* 학번*/
        char name[5];   /*성명 */
        int g_score;    /* 목표점수 */
        char jido, sung, tong; /* 지도코드, 무슨코드,또 무슨 코드*/
        int kor, eng, mat, sci, his, ko_enhap;
        /* 국,영,수,과,역사,국+영점수*/
};
int count = 0;
struct tag input[MAX+1];  /* 파일을 읽어들여 놓을 구조체 */

void main()        {
        int i, j;
        IN = fopen("res0105.txt", "r");
        OUT = fopen("s1104-8.txt","w");  /*출력하려는 파일 */
        for(i = 1; i< MAX+1; i++)  {  /*읽을 데이타의 자료형,크기입니다*/
        fscanf(IN, "%6ld %4s %3d %c %c %c %3d %3d %3d %3d %3d\n",
           &input[i].stuno, &input[i].name, &input[i].g_score, &input[i].jido,
           &input[i].sung, &input[i].tong, &input[i].kor, &input[i].eng,
           &input[i].mat, &input[i].sci, &input[i].his);
           input[i].ko_enhap = input[i].kor + input[i].eng;
        }
                 /*이건 잘 동작되는지 시험용으로 그냥 적었음 */
        printf("%6ld%4s%3d%c%c%c%3d%3d%3d%3d%3d%3d\n",
           input[5].stuno, input[5].name, input[5].g_score, input[5].jido,
           input[5].sung, input[5].tong, input[5].kor, input[5].eng,
           input[5].mat, input[5].sci, input[5].his, input[5].ko_enhap);
        an1();  /* 처리함수 */
        fclose(IN); fclose(OUT);
}

void an1(void)        {
        int i, j, imsi, temp[MAX+1];
        static struct tag N1[MAX+1];  /*지도코드가 B나 C인 데이타를 모아놓을 구조체*/
        for(i = 1; i<MAX+1; i++)
           if(input[i].jido == 'B'|| input[i].jido == 'C')  {
              ++count;
                      temp[count] = i;/* 지도코드가 B 또는 C인 위치를 기억. */
              }
        for(i = 1;i<count+1;i++)
           N1[i] = input[(temp[i])]; /* N1구조체에다 지도코드 B,C인 행을 복사 */
        /*버블정렬 --> 분석중(!!!바로 아래부터 점수들이 이상해집니다 !!!) */                    
        for(i = 1; i< count; i++)                                                                                
           for(j = i+1; j<count+1; j++) /*여긴 국어점수+영어점수 내림차순 정렬*/
             if(N1[i].ko_enhap < N1[j].ko_enhap)   {
                N1[0] = N1[i];
                N1[i] = N1[j];
                N1[j] = N1[0];
             }
        for(i = 1; i< count; i++)  /* 여긴 점수합이 같을 때 학번순으로 오름차순 정렬 */
           for(j = i+1; j<count+1; j++)
             if(N1[i].ko_enhap == N1[j].ko_enhap)
                if(N1[i].stuno > N1[j].stuno)      {
                   N1[0] = N1[i];
                   N1[i] = N1[j];
                     N1[j] = N1[0];
                }
        for(i= 1;i<count+1;i++)
           fprintf(OUT,"%6ld%4s%3d%c%c%c%3d%3d%3d%3d%3d%3d\ttemp[%d] = %d\n",
              N1[i].stuno, N1[i].name, N1[i].g_score, N1[i].jido,
              N1[i].sung, N1[i].tong, N1[i].kor, N1[i].eng,
              N1[i].mat, N1[i].sci, N1[i].his, N1[i].ko_enhap, i,temp[i]);
           fprintf(OUT,"count = %d\n",count);
}
좀 긴데 봐주셔서 감사합니다.
국어+영어 점수 내림차순정렬도 되고  동일값의 학번에 따라 오름차순정렬도 되더군요.
근데 가장 중요한 점수가 엉망으로 나오다니요.. 국어+영어 만점이 200점인데 889점이라니...ㅠㅠ
미치겠어요... 왜 그런지  버퍼를 비워야 하는 건지. 어케 해야 되는지 도저히 모르겠습니다. 열 엄청나네요... 도움의 손길을...!

+ -

관련 글 리스트
2536 구조체 문제인데요, 정말 맘이 급해서...제발좀 봐주세요! 구조체 초보 1136 2003/05/02
4038     Re:구조체 문제인데요, 정말 맘이 급해서...제발좀 봐주세요! 임문환.실업자 964 2003/05/03
4037     Re:구조체 문제인데요, 정말 맘이 급해서...제발좀 봐주세요! 임문환.실업자 1001 2003/05/03
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.