c언어 자꾸 오류가 뜨는데 못잡겠습니다 ㅠㅠ
조회수 630회
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct node
{
int number;
char name[20];
char gender;
char address[80];
struct node *next;
}NODE;
void remove_node(NODE **head, NODE *p, NODE *removed);
void add_node(NODE **head, NODE *p, NODE *new_node);
NODE *create_node(int number, char *name, char gender, char*address, NODE *next);
int search_node(NODE *head, int number);
NODE *sorting(NODE *head);
NODE *sorting_rev(NODE *head);
NODE *fr();
void print();
void add();
void remove_();
int main()
{
int n = 1;
while (n != 0)
{
printf("1 : 출력, 2 : 추가, 3 : 삭제, 0 : 종료\n");
scanf("%d", &n);
switch (n)
{
case 1:
print();
break;
case 2:
add();
break;
case 3:
remove_();
break;
default:
break;
}
}
return 0;
}
void remove_()
{
NODE *head = NULL, *temp1 = NULL, *temp2 = NULL, *p = NULL;
p = sorting(head);
head = p;
temp1 = head;
temp2 = head;
int i, n = 0;
printf("삭제할 항목의 번호를 입력하세요\n");
scanf("%d", &n);
if (n == 1) {
remove_node(&head, NULL, temp2);
temp1 = head;
}
else
{
for (i = 2; i < n; i++)
{
temp1 = temp1->next;
temp2 = temp2->next;
}
temp2 = temp2->next;
remove_node(&head, temp1, temp2);
temp1 = temp1->next;
while (head != NULL)
{
temp1->number = temp1->number - 1;
temp1 = temp1->next;
}
FILE *file;
file = fopen("C:\\Users\\xoghk\\Desktop\\bs_data.txt", "wt");
while (head != NULL)
{
fprintf(file, "%d %s %c %s\n", head->number, head->name, head->gender, head->address);
head = head->next;
}
fclose(file);
}
}
void add()
{
NODE *head = NULL, *p = NULL, *p1 = NULL;
head = fr();
p = sorting_rev(head);
int number = 0;
char name[20] = { 0 };
char gender = NULL;
char address[80] = { 0 };
printf("번호,이름, 성별, 주소를 입력하세요 : ");
scanf("%s %c %s", name, &gender, address);
if (p == NULL)
{
p->number = 0;
}
add_node(&p, NULL, create_node(p->number + 1, name, gender, address, NULL));
p1 = sorting(p);
FILE *file;
file = fopen("C:\\Users\\xoghk\\Desktop\\bs_data.txt", "wt");
while (p1 != NULL)
{
fprintf("file", "%d %s %c %s\n", p1->number, p1->name, p1->gender, p1->address);
p1 = p1->next;
}
fclose(file);
}
NODE *fr()
{
FILE *file;
file = fopen("D:\\db.txt.txt", "rt");
NODE *head = NULL;
int number = 0;
char name[20] = { 0 };
char gender = NULL;
char address[80] = { 0 };
while (1)
{
if (fscanf(file,"%d %s %c %s", &number, name, &gender, address) == -1)
{
break;
}
add_node(&head, NULL, create_node(number, name, gender, address, NULL));
}
fclose(file);
return head;
}
void print()
{
NODE *head = NULL, *p = NULL;
head = fr();
p = sorting(head);
while (p != NULL)
{
printf("%d %s %c %s\n", p->number, p->name, p->gender, p->address);
p = p->next;
}
}
NODE *sorting_rev(NODE *head)
{
NODE *temp1 = NULL, *temp2 = NULL, *temp3 = NULL, *sort = NULL;
int i, count = 0;
temp1 = head;
temp3 = head;
while (temp1 != NULL)
{
temp2 = temp1->next;
while (temp2 != NULL)
{
if (temp1->number > temp2->number)
{
temp1 = temp2;
}
temp2 = temp2->next;
}
add_node(&sort, NULL, create_node(temp1->number, temp1->name, temp1->gender, temp1->address, NULL));
count = search_node(head, temp1->number);
for (i = 0; i < count - 1; i++)
{
temp3 = temp3->next;
}
if (count == 0)
{
remove_node(&head, NULL, temp1);
}
else
{
remove_node(&head, temp3, temp1);
}
temp1 = head;
temp3 = head;
}
return sort;
}
NODE *sorting(NODE *head)
{
NODE *temp1 = NULL, *temp2 = NULL, *temp3 = NULL, *sort = NULL;
int i, count = 0;
temp1 = head;
temp3 = head;
while (temp1 != NULL)
{
temp2 = temp1->next;
while (temp2 != NULL)
{
if (temp1->number < temp2->number)
{
temp1 = temp2;
}
temp2 = temp2->next;
}
add_node(&sort, NULL, create_node(temp1->number, temp1->name, temp1->gender, temp1->address, NULL));
count = search_node(head, temp1->number);
for (i = 0; i < count - 1; i++)
{
temp3 = temp3->next;
}
if (count == 0)
{
remove_node(&head, NULL, temp1);
}
else
{
remove_node(&head, temp3, temp1);
}
temp1 = head;
temp3 = head;
}
return sort;
}
int search_node(NODE *head, int number)
{
int count = 0;
NODE *p;
p = head;
while (p != NULL)
{
if (p->number == number)
{
return count;
}
p = p->next;
count++;
}
return count;
}
void remove_node(NODE **head, NODE *p, NODE *removed)
{
if (p == NULL)
{
*head = (*head)->next;
}
else
{
p->next = removed->next;
}
free(removed);
}
void add_node(NODE **head, NODE *p, NODE *new_node)
{
if (*head == NULL)
{
new_node->next = NULL;
*head = new_node;
}
else if (p == NULL)
{
new_node->next = *head;
*head = new_node;
}
else
{
new_node->next = p->next;
p->next = new_node;
}
}
NODE *create_node(int number, char *name, char gender, char*address, NODE *next)
{
NODE *new_node = NULL;
new_node = (NODE *)malloc(sizeof(NODE));
new_node->number = number;
strcpy(new_node->name, name);
new_node->gender = gender;
strcpy(new_node->address, address);
new_node->next = next;
return new_node;
}
p == null 일때 p->number = 0 여기서 부터 nullptr이라고 오류가 뜨는데 잡지를 못하겠습니다 ㅠㅠ 도주세요...
-
(•́ ✖ •̀)
알 수 없는 사용자 - 〉
1 답변
-
p == NULL
이 참이면 p 는 허공을 가리키고 있는것과 같습니다.
p 가 NODE 구조체를 가리키고 있어야 그 NODE 안의 number 에 접근할 수 있겠지요.
첫 번째 NODE를 만드는 작업이 선결되어야 합니다.
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력