#include <stdio.h>
typedef struct list_node *list_pointer;
struct list_node
{
long id;
int score;
list_pointer link;
};
void sort(list_pointer ptr);
void sort2(list_pointer ptr);
list_pointer find_max(list_pointer ptr);
void print_list(list_pointer ptr);
int main(int argc, char *argv[])
{
int i, dat;
list_pointer ptr = NULL, temp, high_score;
FILE *input;
if ((input = fopen(argv[1], "r")) == NULL) {
printf("입력한 파일을 열 수 없습니다.\n");
exit(1);
}
temp = (list_pointer)malloc(sizeof(struct list_node));
while (fscanf(input, "%ld %d", &(temp->id), &(temp->score)) != EOF)
{
if (ptr)
temp->link = ptr;
else
temp->link = NULL;
ptr = temp;
temp = (list_pointer)malloc(sizeof(struct list_node));
//--> 이부분에서 temp가 ptr을 가르키면 ptr이 먼저 받아서 앞쪽에 위치해야하는게 아닌가요?
}
print_list(ptr);
high_score = find_max(ptr);
printf("최대 성적을 가진 학생 아이디:%ld:성적:%d\n", high_score->id, high_score->score);
}
void print_list(list_pointer ptr)
{
list_pointer temp, s, m, i;
int n;
printf("학번순 정렬(1),성적순 정렬(2)");
scanf("%d", &n);
if (n == 1)
{
sort(ptr);
}
else if (n == 2)
{
sort2(ptr);
}
else
{
printf("잘못입력하셨습니다.");
}
for (; ptr; ptr = ptr->link)
{
printf("%ld==%d\n", ptr->id, ptr->score);
}
}
list_pointer find_max(list_pointer ptr)
{
int iid;
list_pointer max=ptr;
for (; ptr; ptr = ptr->link)
{
if (max->score < ptr->score)
{
max = ptr;
}
}
return max;
}
void sort(list_pointer ptr)
{
list_pointer p, q, r;
long tmp,tmp2;
for (p = ptr; p; p = p->link)
for (q = p->link; q; q = q->link)
if (p->id > q->id)
{
tmp = p->id;
tmp2 = p->score;
p->id = q->id;
p->score = q->score;
q->id = tmp;
q->score = tmp2;
}
}
void sort2(list_pointer ptr)
{
list_pointer p, q, r;
long tmp, tmp2;
for (p = ptr; p; p = p->link)
for (q = p->link; q; q = q->link)
if (p->score> q->score)
{
tmp = p->id;
tmp2 = p->score;
p->id = q->id;
p->score = q->score;
q->id = tmp;
q->score = tmp2;
}
}
저부분 실행순서좀 알려주세요 ㅠㅠ 햄들
저거 1학년때 전자과 C언어 수업이였는데