c로 구조체 파일 입출력하는데
2진파일로 하나맹글고
fwrite(구조체배열,구조체덩어리,덩어리수,파일포인터) 하고
fread(구조체배열,구조체덩어리,덩어리수,파일포인터) 하면 값이

뷁뒒퀡퀡휅뤡ㄹ줻뤨뤨뤠랄라라

뭐 이런거 나와 ㅠㅠㅠㅠㅠ 이거 왜 이런거야?

아래가 소스코드..


typedef struct subject{
        char name[20];
        char gubun[20];
        float hakjum;
        float pyungjum;
        float total;
        float Eval;
} sub; //이건 구조체고

void input(char* name){
        int n, i=0,k=0,z=0,len=0;
        FILE* f1;
        sub *suB,*suB2;

        float total=0,totalH=0,pyung=0;

        printf("입력할 과목 수 : ");
        scanf("%d",&n);

        f1=fopen(name,"ab"); //파일스트림개방
        if(f1==NULL){
                printf("파일 읽기 오류\n");
                exit(1);
        }

        suB=(sub*)malloc(n*sizeof(sub)); //입력값 만큼 구조체배열 suB 크기 할당
        if(suB==NULL){
                printf("메모리 부족!\n");
                free(suB);
                exit(1);
        }

        printf("*****************************************************\
                   \n[과목명-과목구분-학점-평점] 순으로 입력하시오.\nEX) 전자장_공학전공_3_4.3\n");
        printf("[평점값] A+:4.3 A0:4.0 A-:3.7 B+:3.3 B0:3.0 B-:2.7 \
                   \n         C+:2.3 C0:2.0 C-:1.7 D+:1.3 D0:1.0 D-:0.7 F:0.0\
                   \n*****************************************************\n\n");
        for(z=0;z<n;z++){
                printf("%d 번째 과목 입력 : ",z+1);
                scanf("%s %s %f %f",suB[z].name,suB[z].gubun,&suB[z].hakjum,&suB[z].pyungjum);
                suB[z].total=total+=suB[z].pyungjum*suB[z].hakjum;
                totalH+=suB[z].hakjum;
                suB[z].Eval=total/totalH;
        }

        fprintf(stdout,"\n평점토탈 : %.3f, 평점평균 : %.3f\n",suB[z-1].total,suB[z-1].Eval);

///////////////////////데이터 save
//        for(z=0;z<n;z++){
//                fwrite(&suB[z],sizeof(sub),1,f1);
//                fprintf(f1,"%7s %7s %7.0f %7.3f %7.3f %7.3f\n",suB[z].name,suB[z].gubun,suB[z].hakjum,suB[z].pyungjum,suB[z].total,suB[z].Eval);
//        }        
//        fseek(f1,0L,SEEK_END);
//        printf("커서위치 : %lf\n",ftell(f1));      <<<<<<<<<<<<<<<<<<<<<<<<<<<< ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ파일위치지시자? 이거 계속 0이야 ㅠ


        fwrite(suB,sizeof(sub),n,f1);
        fclose(f1);
        free(suB);
/////////////////////////////////////         <<<<<<<<<<<<<<<<<<<<<<<<<<<<<요부분이 문젠거 같은데 뭐가문제지..
//다시 열긔

        f1=fopen(name,"ab");
        if(f1==NULL){
                printf("파일 읽기 오류\n");
                exit(1);
        }
        len=get_file_length(name);//stat()으로 파일크기를 변수로 받음.
        suB2=(sub*)malloc(len); //새로 동적할당.

        while(1){
                printf(">>데이터 보기 (1), 추가입력 (2), 초기화면 (0) : ");
                scanf("%d",&i);
                if(i==1){
                        printhead();
                        fread(&suB2,sizeof(sub),(int)(len/sizeof(sub)),f1);
                        for(z=0;z<(int)((len/sizeof(sub)));z++){
                                fprintf(stdout,"%7s %7s %7.0f %7.3f\n",suB2[z].name,suB2[z].gubun,suB2[z].hakjum,suB2[z].pyungjum);
                        }
                        fprintf(stdout,"\n평점토탈 : %.3f, 평점평균 : %.3f\n",suB2[z-1].total,suB2[z-1].Eval);

                        while(1){
                                printf(">>추가입력 (1), 초기화면으로 (0) : ");
                                scanf("%d",&k);
                                if(k==1){
                                        fclose(f1);        
                                        free(suB2);
                                        input(name);
                                }
                                else if (k==0){
                                        fclose(f1);        
                                        free(suB2);
                                        menu();
                                }
                                else {
                                        printf("잘못된 입력입니다.\n");
                                        continue;
                                }
                        }
                }
                else if(i==2){
                        fclose(f1);
                        free(suB2); 
                        input(name);
                }
                else if(i==0){
                        fclose(f1);
                        free(suB2);
                        menu();
                        break;
                }
                else {
                        printf("잘못된 입력입니다.\n");
                        continue;
                }
        }
        free(suB2);

}