#include "stdafx.h"
#include "math.h"
#include <string.h>
#define OUTPUT "성적순.txt"

int _tmain(int argc, _TCHAR* argv[])
{

  struct student{    //구조체 선언
  char name[10];
  float number[10];
  float sub[3];
  float total;
  float aver;
  int rank;
  int nrank;

 } s[10];

 int i, j, n;     //정수형 변수선언
 char filename[20];
 FILE *fp1, *fp2;   //파일형 변수 선언
 
 while(1)     //무한반복
 {
  printf("입력할 파일명을 입력하세요(예: *.txt):"); //파일명을 입력받을 문구 출력
  scanf("%s",filename);        //입력받은 문자열을 filename에 저장

  fp1=fopen(filename,"r");  //파일을 읽기전용으로 연다
  if(fp1==NULL)     //열린 파일이 없으면
   printf("해당 파일이 없습니다."); //에러문구 출력하고 다시 반복
  else       //아니면
   break;        //무한반복 탈출
 }

 for(i=0; i<10; i++)   //i는 0부터 10보다 작은동안 1씩 증가하며 반복
 fscanf(fp1,"%s %s %f %f %f", s[i].name,s[i].number, &s[i].sub[0], &s[i].sub[1], &s[i].sub[2]);
 fclose(fp1);    //파일을 각각의 변수에 저장 하고 파일을 닫는다

 for(i=0; i<10; i++)   //i는 0부터 10보다 작은동안 1씩 증가하며 반복
  s[i].total = s[i].sub[0] + s[i].sub[1] + s[i].sub[2];
  //각 과목의 총합을 더하여 total에 저장
 for(i=0; i<10; i++)
  s[i].aver = 0.333*s[i].total;

 for(i=0; i<10; i++)   //i는 0부터 10보다 작은 동안 1씩 증가하며 반복
 {
  s[i].rank=1;   //rank에 초기값 1을 저장
  for(j=0; j<10; j++)  //j는 0부터 10보다 작은동안 1씩 증가하며 반복
  {
   if(s[i].total < s[j].total)  //s[j].total 값이  s[i].total 보다 크면
    s[i].rank++;    //s[i].rank +1을 한다
  }
 }

 for(i=0; i<10; i++)   //i는 0부터 10보다 작은 동안 1씩 증가하며 반복
 {
  s[i].nrank=1;   //rank에 초기값 1을 저장
  for(j=0; j<10; j++)  //j는 0부터 10보다 작은동안 1씩 증가하며 반복
  {
   if(s[i].number < s[j].number)  //s[j].total 값이  s[i].total 보다 크면
    s[i].nrank++;    //s[i].rank +1을 한다
  }
 }


 fp2=fopen(OUTPUT,"w");  //파일을 쓰기전용으로 연다
 printf("┌───────────【 순위별성적표 】────────────────┐\n");
 fprintf(fp2,"┌───────────【 순위별성적표 】────────────┐\n");
 printf("│     이 름      국어      영어      수학     합계      평균     등수    │\n");
 fprintf(fp2,"│     이 름      국어      영어      수학     합계    평균   등수    │\n");
 //성적표 항목 을 콘솔및 파일에 출력
 for(i=1; i<=10; i++)  //i는 1부터 10보다 작거나 같은동안 1씩 증가하며 반복
 {
  for(j=0; j<10; j++)  //j는 0부터 10보다 작은동안 1씩 증가하며 반복
  {
   if(s[j].rank==i) //각각의 등수가 i과 같으면 (즉, 1등부터 차례로 출력)
   {
 
    printf("│%10s%10.1f%10.1f%10.1f%10.1f%10.1f%10d  │\n", s[j].name, s[j].sub[0], s[j].sub[1], s[j].sub[2], s[j].total, s[j].aver, s[j].rank);
    fprintf(fp2, "│%10s%10.1f%10.1f%10.1f%10.1f%10.1f%10d │\n", s[j].name, s[j].sub[0], s[j].sub[1], s[j].sub[2], s[j].total, s[j].aver, s[j].rank);
   } //해당 사람의 성적을 콘솔및 파일에 출력
  }

 
 fclose(fp2); //하단 라인을 출력하고 줄내림

 
  }
 return 0;
}







코드는 이건데 이걸 malloc 으로 하고싶어 ㅜㅜ
동적할당인 것도 알겠고 다 좋은데 이거 불러오는 파일을  malloc 으로 처리하는 게 숙젠데 난 도저히 못 하겠다
능력자형님들 도와주십셔 ㅜㅜ 자고싶어요!!!