c언어 동적 메모리 할당으로 순차 정렬
조회수 673회
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct student {
int id;
char name[20];
int score[4];
struct student *next;
};
int main()
{
int count = 0, id,sc[4];
char name[20],line[200];
struct student *p, *head, *node = NULL;
printf("학번과 이름을 입력하세요\n");
fgets(line, 200, stdin);
while (fgets(line, 200, stdin) != NULL) {
sscanf(line, "%d %s %d %d %d %d", &id, name,
&sc[0],&sc[1],&sc[2],&sc[3]);
p = (struct student *) malloc(sizeof(struct student));
node = (struct student *) malloc(sizeof(struct student));
if (head == NULL)
head = p;
else
node->next = p;
node = p;
if (p == NULL) {
perror("malloc");
exit(1);
}
p->id = id;
strcpy(p->name, name);
node=p->next;
for(int i=0; i< 4; i++)
p->score[i]=sc[i];
}
printf("\n* 학생 정보 *\n");
p = head;
while (p != NULL) {
count++;
printf("학번: %d 이름: %s : ", p->id, p->name);
for(int i=0; i< 4; i++)
printf("%6d", p->score[i]);
printf("\n");
p = p->next;
}
printf("총 %d 명입니다.\n", count);
exit(0);
}
//부분을 고쳐서 순차적으로? 정렬하는 건 어떻게 하나요??ㅠㅠㅠㅠ 파일 자체가 순차적으로 정렬이 되어있어서 노드로 이어주면서 출력을 하면 될 것 같은데 계속 안 돼서 질문 드립니다... 모바엑스텀에서 하는 걸로 txt 파일을 리다이렉션으로 실행 할 때 넣어주는 방법으로 실행시키고 있습니다. 이걸 실행시키면 세그멘테이션 오류나 39줄이 정렬 되어야하는데 한 줄만 나오는 그런 결과가 나와서 질문합니다ㅜㅜ
1 답변
-
// 부분이 안보입니다.
p = (struct student *) malloc(sizeof(struct student)); node = (struct student *) malloc(sizeof(struct student)); if (head == NULL) head = p; else node->next = p; node = p; f (p == NULL) { perror("malloc"); exit(1); } p->id = id; strcpy(p->name, name); node=p->next;
이 부분도 문제가 있는거 같네요. node를 현재 가르키고 있는 노드를 나타내는 포인터로 사용하실려고 하는거 같은데, 그러면 동적할당을 해줄 필요가 없습니다. node 포인터는 단지 리스트에 추가될때마다 움직여주면서 현재 노드를 가르키면 되겠네요.
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력