프잘알 프갤 성님들 안녕하심까 질문하나 오지게 박겠습니다.
제가 링크드리스트랑 파일입출력을 활용해서 학생자료 관리 프로그램을 만드는데 연결리스트에서 데이터 지우는거를 모르겠습니다. 제 빡머가리로는 아무리 생각해도 안떠오르네요 프갤 성님들의 도움이 필요합니다람쥐
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct student //linked list
{
char name[30];
char ID_num[30];
char major[30];
struct student *next;
};
struct student *first = NULL;
struct student *current = NULL;
struct student *previous = NULL;
void ADD(); //prototype
void DELETE();
void EDIT();
void PRINT_ALL();
void SEARCH();
FILE *pfile = NULL; //file pointer
/* 메인 함수 */
int main (void)
{
pfile = fopen("student.txt", "r"); //파일에서 데이터 읽어옴
for( ; ; )
{
current = (struct student*) malloc(sizeof(struct student));
if(first == NULL)
first = current;
if(previous != NULL)
previous->next = current;
if(fscanf(pfile, "%s", current->name) == EOF)
break;
fscanf(pfile, "%s", current->ID_num);
fscanf(pfile, "%s", current->major);
current->next = NULL;
previous = current;
}
fclose(pfile);
int select = 0;
printf(">> Student Management System <<\n\n");
for( ; ; )
{
printf("========Menu========\n"); //메뉴 선택
printf("1. Add\n"
"2. Delete\n"
"3. Modify\n"
"4. Search\n"
"5. Display all\n"
"6. End program\n");
printf("====================\n");
printf("Select a function >> ");
scanf("%d", &select);
switch (select)
{
case 1:
ADD();
break;
case 2:
DELETE();
break;
case 3:
EDIT();
break;
case 4:
SEARCH();
break;
case 5:
PRINT_ALL();
break;
case 6:
return 0;
default :
printf("incorrect input");
break;
}
}
return 0;
}
/* 함수 정의 */
void ADD(void)
{
pfile = fopen("student.txt", "a");
current = (struct student*) malloc(sizeof(struct student));
if(first == NULL)
first = current;
if(previous != NULL)
previous->next = current;
printf("Enter name: ");
scanf("%s", current->name);
fprintf(pfile, "%s ", current->name);
printf("Enter ID number: ");
scanf("%s", current->ID_num);
fprintf(pfile, "%s ", current->ID_num);
printf("Enter major: ");
scanf("%s", current->major);
fprintf(pfile, "%s\n", current->major);
current->next = NULL;
previous = current;
fclose(pfile);
printf("Add completed!\n");
}
void DELETE(void)
{
char name_del[30];
printf("Enter the name of the student you want to delete: ");
scanf("%s", name_del);
current = first;
while(current != NULL)
{
if(strcmp(name_del,current->name) == 0)
{
while(current != NULL)
{
previous->next = current->next;
current = previous->next;
}
}
previous = current;
current = previous->next;
}
pfile = fopen("student.txt", "w");
current = first;
while(current->name != NULL)
{
fprintf(pfile, "%s %s %s\n", current->name, current->ID_num, current->major);
current = current->next;
}
previous = current;
fclose(pfile);
printf("Delete completed!");
}
void EDIT(void)
{
char name_edit[30];
printf("Enter the name of the student you want to modify: ");
scanf("%s", name_edit);
current = first;
while(current != NULL)
{
if(strcmp(name_edit, current->name) == 0)
{
printf("Enter new name: ");
scanf("%s", current->name);
printf("Enter new ID number: ");
scanf("%s", current->ID_num);
printf("Enter new major: ");
scanf("%s", current->major);
}
previous = current;
current = previous->next;
}
pfile = fopen("student.txt", "w");
current = first;
while(current->name != NULL)
{
fprintf(pfile, "%s %s %s\n", current->name, current->ID_num, current->major);
current = current->next;
}
previous = current;
fclose(pfile);
}
void SEARCH(void)
{
char name_search[30];
printf("Enter the name of student you want to search: ");
scanf("%s", name_search);
current = first;
while(current != NULL)
{
if(strcmp(name_search, current->name) == 0)
{
printf("%s %s %s\n", current->name, current->ID_num, current->major);
}
previous = current;
current = previous->next;
}
}
void PRINT_ALL(void)
{
current = first;
while(current != NULL)
{
printf("%s %s %s\n", current->name, current->ID_num, current->major);
previous = current;
current = previous->next;
}
}
해결완료했습니다 형들