코드의 {} 가 좀 이상합니다.
그리고 while(evaluation!=NULL) 이 부분에서
evaluation 는 class 이름이지 인스턴스가 아닙니다.
evaluation * ptr = xxxx;
while(ptr != NULL)
이런식으로 수정해야할듯...
김동석 님이 쓰신 글 :
: #include "stdafx.h"
: #include "stdio.h" //text파일로 출력을 위해서는 헤더파일에 stdio.h파일이 있어야한다.
:
: struct score //score라는 구조체를 만들었습니다.
: {
: char* name[100];
: char* sub[5]; //sub라는 변수의 내용은 char형태이고 이 포인터는 다른 함수에서 내용을 참조할 수 있습니다. 배열크기는 과목이 5개이므로 5를 주었습니다.
: int data[5]; //data는 점수이고 정수이므로 int형태이다. 이 역시 과목 5개 대한 점수를 입력하기 위해 크기를 5로 주었습니다.
: char* grade[5]; //grade는 학점이고 변수내용은 char형태이입니다. 이 역시 포인터를 사용해 다른함수에서 내용을 참조할 수 있습니다. 이것을 설정한 이유는 나중에 텍스트파일 출력에 사용하기 위해서 입니다.
: };
:
: class evaluation //evaluation 이라는 class를 만들었습니다. class는 struct의 확장적 의미입니다.
: {
: public: //타입은 public타입을 사용하였으며, public경우 모든 곳에서 접근할 수 있습니다.
:
: struct score sc; //class안에 위에 설정한 score라는 struct를 설정하였습니다.
: void input(); //멤버함수를 쓰기위해 void타입으로 나중에 입력할 input과 학점을 넣을 project도 선언하였습니다.
: void project(int i); //이때, input에서는 아직 입력받은게 없으므로 ()가 비었지만 project는 input에서 입력받은 점수를 가지고 학점을 매기므로 int i를 넣었습니다.
: };
:
: void evaluation::input() //evaluation class의 input라는 멤버함수를 만들었습니다.
: {
: int i, j, temp; //이 경우는 선택정렬입니다. 인터넷을 통해 소스를 다운받았습니다.
: char* tempa;
:
: sc.sub[0] = "C"; //이때, 구조체서 만든 과목sub의 배열의 값을 각각 지정해주었습니다.
: sc.sub[1] = "CPP";
: sc.sub[2] = "DB";
: sc.sub[3] = "CAD";
: sc.sub[4] = "CATIA";
:
: printf("이름을 입력해 주세요.");
: scanf("%s", &sc.name);
:
: printf("\n");
: for(i=0; i<5; i++)
: {
: printf("%s의 점수를 입력하시오. ", sc.sub[i]);
: scanf("%d", &sc.data[i]); //이때 각 점수는 그 배열에 맞게 놓여지도록 설정하였습니다.
: }
:
:
: printf("[\n%s의 성적\n]", sc.name);
: //이때 점수에 따라 높은 것부터 낮은 것으로 정렬시키게 만드는 것이고
: for(i=0; i<4; i++) //거기에 따라 프린트 되어지는 문자도 같이 정렬되게 만들었습니다.
: { //변수를 두개 지정하고 정수에 관한 temp도 지정해주었습니다, 그리고 점수에 따른 문자도 이동해야하므로 tempa도 사용해주었습니다.
: for(j=i+1; j<5; j++) //선택정렬을 sc.sub[0]의 점수를 기준으로 했을시 sc.sub[1]의 점수가 sc.sub[0]보다 높으면 높은게 앞쪽으로 오도록 하고
: { //만약 점수가 같거가 sc.sub[0]가 더 클시에는 그냥 그대로 위치하도록 해놓는 것을 말합니다.
: if(sc.data[i]<sc.data[j])
: {
: temp=sc.data[i]; //점수에 맞게 이동하고 난뒤에, 문자도 역시 이동해야하므로 temp와 tempa를 이용하여 만들었습니다.
: sc.data[i]=sc.data[j];
: sc.data[j]=temp;
:
: tempa=sc.sub[i]; //그리고 점수 입력을 5번하므로 for문이 4번 반복되도록 설정했습니다.
: sc.sub[i]=sc.sub[j];
: sc.sub[j]=tempa;
: }
: }
: }
:
: }
:
: void evaluation::project(int i) //evaluation class의 input라는 멤버함수를 만들었습니다. int i는 scanf 받은 점수를 가지고 학점을 매기기 위해 넣었습니다.
: {
: int score;
:
: score = sc.data[i]; //이때 C라는 것을 구조체의 점수배열로 만들었습니다.
:
:
: if(score >= 90 && score <= 100) //그리고 if와 else if를 사용해 점수때별 학점을 매기게 만들었습니다.
: {
: sc.grade[i] = "A"; //이때 아까 위에 학점 grade의 배열을 5칸 만들어서 점수 5번 입력시 학점도 저장할 수 있도록 배열로 받았습니다.
: }
: else if(score >= 80 && score < 90)
: {
: sc.grade[i] = "B";
: }
: else if(score >= 70 && score < 80)
: {
: sc.grade[i] = "C";
: }
: else if(score >= 60 && score < 70)
: {
: sc.grade[i] = "D";
: }
: else if(score < 60)
: {
: sc.grade[i] = "F";
: }
:
: printf("%s\t%d\t<%s>\n", sc.sub[i], score, sc.grade[i]); //그리고 프린트 f서 먼저 과목명과 점수, 학점이 뜨도록 printf를 설정하였으며 이때 줄간격을 맞추기 위해 tab기호인 \t를 썼습니다.
: }
:
:
: int main(int argc, char* argv[]) //마지막으로 메인문에다가 이때까지 만든 class와 멤버함수를 인식시켜야합니다.
: {
: int i;
:
: ret:
: printf("원하시는 모드를 선택해 주십시오.\n1.성적 입력 모드\n2.성적 조회 모드\n3.프로그램 종료\n");
: scanf("%d", &i);
: switch(i)
: {
: case(1):
: goto insert;
: case(2):
: goto search;
: case(3):
: goto exit;
: default:
: printf("잘못 입력하셨습니다 다시 입력해 주십시오.\n");
: goto ret;
: }
:
: insert:
:
: evaluation ev; //evaluation라는 class를 넣었습니다.
: ev.input(); //그리고 class의 멤버함수인 input을 넣었습니다.
: printf("과목명\t점수\t학점\n");
: for(
: i=0; i<5; i++) //project 멤버함수도 넣는데 이경우 점수를 5번입력하므로 그 입력한 값에 대한 각각의 학점이 다 나와야 하므로 for문을 이용하여 5번 반복시켰습니다.
: {
: ev.project(i);
: }
:
:
: search:
:
:
:
: int* name;
: printf("조회하려는 학생의 이름을 입력하시오.(처음으로 되돌아가려면 0을 입력) : ");
: scanf("%s", name);
:
: if(name[0]=='0')
: goto ret;
:
: while(evaluation!=NULL)
: {
: if(strcmp(evaluation->sub,name) == 0)
: {
: printf("%s의 성적\n", evaluation->grade);
: printf("과목명 점수 학점\n");
: for(i=0; i<5; i++)
: {
: printf("%s %d %c\n", evaluation->sub[i], evaluation->data[i], evaluation->grade[i]);
: }
: }
: evaluation = evaluation->link;
:
:
:
: char fname[100] = "grade.txt";
:
: FILE *f;
: int cnt = 0;
:
: while (!feof(stdin))
: {
: fprintf(f,"%d",++cnt);
: fputs(name,f);
: fgets(name,100,stdin);
: }
: fclose(f);
:
:
:
:
: }
:
:
:
:
:
:
: exit:
: return 0;
: }
:
<
<
<
<
<
<