메인함수 menu에서 오류가 납니다..
syntax error : missing \';\' before \'type\'
\'menu\' : undeclared identifier
이렇게 되는데 왜그런거죠....?;;;;;;
#include <stdio.h>
#include <malloc.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
typedef struct
{
int student_num;
char name[10];
int kor;
int eng;
int math;
int total;
int rank;
} STU;
STU *stu;
int a;
void initialize(void);
int display_menu(void);
void Input(void);
void Delete_record(void);
void Search_record(void);
void Display_records(void);
void display_rank(void);
void Save(void);
void Load(void);
void print_usage(void);
int main(void)
{
stu = (STU*)malloc(sizeof(STU) * 20);
int menu;
initialize(); //초기화????
while(1)
{
menu = display_menu(); //메뉴띄우는거
switch(menu)
{
case 1 :
Input();
break;
case 2 :
Delete_record();
break;
case 3 :
Search_record();
break;
case 4 :
Display_records();
break;
case 5 :
Save();
break;
case 6 :
Load();
break;
case 7 :
printf(\"프로그램을 종료 합니다.\\n\");
return 0;
default :
print_usage();
break;
}
}
return 0;
}
void initialize(void)
{
printf(\"초기화 구문입니다.\\n\");
}
int display_menu(void)
{
int i;
printf(\"=======================\\n\");
printf(\" 1.수정\\n\");
printf(\" 2.삭제\\n\");
printf(\" 3.검색\\n\");
printf(\" 4.성적 출력\\n\");
printf(\" 5.저장\\n\");
printf(\" 6.불러오기\\n\");
printf(\" 7.종료\\n\");
printf(\"=======================\\n\");
printf(\" Number Choice : \");
scanf(\"%d\",&i);
return i;
}
void Input(void)
{
int i;
FILE *fp;
fp=fopen(\"input.txt\", \"a+\");
printf(\"입력할 학생수 : \");
scanf(\"%d\", &a);
printf(\"성적 입력란 입니다.\\n\");
printf(\"다음을 입력해주세요.\\n\");
for(i=0; i<a; i++)
{
printf(\"학번 : \");
scanf(\"%d\", &stu[i].student_num);
printf(\"이름 : \");
scanf(\"%s\", stu[i].name);
printf(\"국어 점수 : \");
scanf(\"%d\", &stu[i].kor);
printf(\"영어 점수 : \");
scanf(\"%d\", &stu[i].eng);
printf(\"수학 점수 : \");
scanf(\"%d\", &stu[i].math);
fprintf(fp, \"%d %s %d %d %d \\n\",stu[i].student_num,stu[i].name,stu[i].kor,stu[i].eng,stu[i].math);
/*if(i>=1)
for(i=0;i<x;i++)
{
if(stu[a].student_num==stu[i].student_num)
printf(\"이미 존재하는 학번 입니다.\");
}*/
}
fclose(fp);
}
void Delete_record(void)
{
printf(\"삭제 루틴 입니다.\\n\");
}
void Search_record(void)
{
printf(\"검색 루틴 입니다.\\n\");
}
void Display_records(void)
{
printf(\"출력 루틴 입니다.\\n\");
display_rank();
}
void display_rank(void)
{
int i, j;
FILE *fp1, *fp2; //파일형 변수 선언
while(1)
{
fp1=fopen(\"input.txt\",\"r\"); //파일을 읽기전용으로 연다
if(fp1==NULL)
{
printf(\"해당 파일이 없습니다.\\n\");
return 1;
}
else
break;
}
for(i=0; i<20; i++) //i는 0부터 10보다 작은동안 1씩 증가하며 반복
fscanf(fp1,\"%d %s %f %f %f\", &stu[i].student_num, stu[i].name, &stu[i].kor, &stu[i].eng, &stu[i].math);
fclose(fp1); //파일을 각각의 변수에 저장 하고 파일을 닫는다
for(i=0; i<a; i++)
stu[i].total = stu[i].kor + stu[i].eng + stu[i].math; //각 과목의 총합을 더하여 total에 저장
for(i=0; i<a; i++)
{
stu[i].rank=1; //rank에 초기값 1을 저장
for(j=0; j<a; j++)
{
if(stu[i].total < stu[j].total) //총점으로 등수비교하는거
stu[i].rank++; //s[i].rank +1을 한다
}
}
fp2=fopen(\"rank.txt\",\"w\"); //파일을 쓰기전용으로 연다
printf(\"┌───────────【 순위별성적표 】───────────┐\\n\");
fprintf(fp2,\"┌───────────【 순위별성적표 】───────────┐\\n\");
printf(\"│ 이 름 국어 영어 수학 합계 등수 │\\n\");
fprintf(fp2,\"│ 이 름 국어 영어 수학 합계 등수 │\\n\");
//성적표 항목 을 콘솔및 파일에 출력
for(i=1; i<=a; i++) //i는 1부터 10보다 작거나 같은동안 1씩 증가하며 반복
{
for(j=0; j<a; j++) //j는 0부터 10보다 작은동안 1씩 증가하며 반복
{
if(stu[j].rank==i) //각각의 등수가 i과 같으면 (즉, 1등부터 차례로 출력)
{
printf(\"├───────────────────────────────┤\\n\");
fprintf(fp2,\"├───────────────────────────────┤\\n\");
printf(\"│%d%10s%10.1f%10.1f%10.1f%10.1f%10d │\\n\", stu[j].student_num,stu[j].name, stu[j].kor, stu[j].eng, stu[j].math, stu[j].total, stu[j].rank);
fprintf(fp2, \"│%d%10s%10.1f%10.1f%10.1f%10.1f%10d │\\n\", stu[j].student_num,stu[j].name, stu[j].kor, stu[j].eng, stu[j].math, stu[j].total, stu[j].rank);
} //해당 사람의 성적을 콘솔및 파일에 출력
}
}
printf(\"└───────────────────────────────┘\\n\");
fprintf(fp2,\"└───────────────────────────────┘\\n\");
fclose(fp2); //하단 라인을 출력하고 줄내림
}
void Save(void)
{
printf(\"저장 루틴 입니다.\\n\");
}
void Load(void)
{
//STU student;
FILE *fp, *fp1;
fp = fopen(\"input.txt\", \"r\");
// do{
// fscanf(fp, \"%d%s%d%d%d\",&student.student_num,student.name,&student.kor,&student.eng,&student.math);
// printf(\"%4d %4s%4d%4d%4d\\n\",student.student_num,student.name,student.kor,student.eng,student.math);
// }
while(fgetc(fp) != EOF)
{
int i=1;
fscanf(fp, \"%d%s%d%d%d\",&stu[i].student_num,stu[i].name,&stu[i].kor,&stu[i].eng,&stu[i].math);
printf(\"%4d %4s%4d%4d%4d\\n\",stu[i].student_num,stu[i].name,stu[i].kor,stu[i].eng,stu[i].math);
fclose(fp);
fp1 = fopen(\"output.txt\",\"w\");
fprintf(fp1, \"%4d %4s%4d%4d%4d\",stu[i].student_num,stu[i].name,stu[i].kor,stu[i].eng,stu[i].math);
fclose(fp1);
i++;
}
}
void print_usage(void)
{
printf(\"잘못된 숫자를 입력하셧습니다.\\n\");
}
이 소스 그대로 갖다 붙였어. 컴파일 에러 안 나거든?
http://codepad.org/Uid8p6Fr
에러가 안 나서 나도 뭐가 문젠지 잘 모르겠어.
저도 거기서 해봤는데 에러가 안나는데 이건 미친 프로그램인가.... 재부팅이라도 한번 해봐야겠네요 ㅠㅠ;;
프로젝트를 다시 만들어봐. 필경 6.0이겠지?
microsoft visual C++ 6.0......프로젝트에선 그게 오류안나고 다른게 오류가 나요....void display_rank(void) 에서 return 1; 을 줬더니...-ㅁ-;; 원래 보이드 함수는 리턴값을 안받지만 해봤는데 되길레 그냥 했었는데.... void말고 int형으로 바꿔주면 되는거죠?
그리구 저는 프로젝트해서 하기가 귀찮아서 그냥 new text file을 만들어 저정할때 *.c로 해놓고 저장해서 하는데 그러면 이상한곳에서 컴파일 오류가 생기나요..?;;;
... 6.0은 안 쓴지가 너무 오래돼서 모르겠다.
그리고 void 함수에서는 리턴을 하면 오류가 나야 정상이야. 리턴할 게 있으면 리턴형을 주고 리턴할 게 없으면 리턴할 때 값을 리턴하지 마.
그리구요...void Load(void)부분을 좀 봐주세요.. 루프중에서 아무것도 없는곳이 있을때동안 무한루프인데요....잘못된건가요..?? 학번이 20085555이면 85555만 나오고 한개의 자료밖에 안나옵니다..
... 반복문 안에서 i를 선언해주면 그걸 카운트용으로 쓸 수 있겠냐. 항상 1일텐데.
이제 남은건 네가 좀 디버깅하면서 해결해라. 나도 내 일 해야지.
남은건 반넘게 남았는데 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 후,, 최대한 저혼자 해볼께요 ㅎㅎ