#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 으로 처리하는 게 숙젠데 난 도저히 못 하겠다
능력자형님들 도와주십셔 ㅜㅜ 자고싶어요!!!
니가 짠거면 잠도 안오고 해주겠는데 니가짠게 아니라 안해줄래
113번째줄 에러
인터넷에 떠도는 거 뭐 쪼끔 수정한거라 할 말 없다 ㅜㅜ 근데 나 이거 못 하면 죽는다 ㅜㅜ사람하나살려줘 형
113번째줄이 없는데ㅜㅜㅜㅜㅜ 형님들 도와주십셔
3만원 불러봅니다...후후
형님, 한번만 도와주시면 햏햏했 이라는 닉넴 30번 외치고 잠자리에 들며 비쥬얼스튜디오 킬때마다 형님 생각하며 감사하겠습니다 ㅜㅜ
구라지씹녀나ㅋ
이걸 해결할 수 있다면 그 어떤 모욕과 고통도 인내할 수 있다.
인내 안해도 돼 3만원이면 되는데 머
어떻게 안 될까여...ㅜㅜ 돈없는대학생인데 ㅜㅜ