Не получается сделать функцию deleting- Удаление по названию из односвязного списка. У меня есть структура данных, я заполняю её через функцию first_look() и хочу удалить какой-то элемент по названию. Подскажите что не правильно.
Код:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct studying{
char name[10];
char address[10];
char language[10];
int listeners;
int price;
int time_of_stud;
};
struct List {
struct studying el;
struct List *next;
};
FILE *study;
int n=0;
void first_look(){
struct List *start=NULL;
struct List *p_del;
int i=0;
start=malloc(sizeof(struct List));
struct List *finish=start;
study=fopen("learning","ab");
if(study == NULL) {
printf("ERROR");
exit(0);
}
else {
printf("How many are courses?: ");
scanf("%d", &n);
for( ; i < n ; i++) { //ввод даних
finish->next=malloc(sizeof(struct List));
puts("");
printf("Enter a name of courses: ");
scanf("%s", finish->el.name);
printf("Enter an address of the courses: ");
scanf("%s", finish->el.address);
printf("Enter a foreign language of the courses: ");
scanf("%s",finish->el.language);
printf("Enter a number of listeners of the courses: ");
scanf("%d",&finish->el.listeners);
printf("Enter a price of the courses: ");
scanf("%d",&finish->el.price);
printf("Enter a period of the courses: ");
scanf("%d",&finish->el.time_of_stud);
fwrite(&finish->el, sizeof(struct studying), 1, study);
finish=finish->next;
finish->next=NULL;
}
//free(finish);
}
fclose(study);
finish=start;
while(finish){
p_del=finish;
finish=finish->next;
free(p_del);
}
}
void deleting() {
char name_del[15];
struct List *start=NULL, *tmp;
start=malloc(sizeof(struct List));
struct List *del=start, *prev=NULL;
struct List *p_del, *p_del1;
study=fopen("learning","wb");
if(study == NULL) {
printf("ERROR");
exit(0);
}
else {
printf("\nEnter a name of a courses that you want to delete: ");
scanf("%s",name_del);
while(del)
{
del=malloc(sizeof(struct List));
prev=malloc(sizeof(struct List));
fread(&del->el, sizeof(struct studying), 1, study);
if(!strcmp(name_del, del->el.name))
{
if(start)
{
tmp=start;
start = start->next;
free(tmp);
}
else
{
start = del->next;
tmp=del->next;
free(del);
del=tmp;
}
puts("Element is deleted successfully");
}
else
{
start = del;
del = del->next;
}
fwrite(&del->el, sizeof(struct studying), 1, study);
}
}
fclose(study);
del=start;
while(del){
p_del=del;
del=del->next;
free(p_del);
}
}
int main()
{
int operations=0;
puts("| Please, write a number of the operation that you want to make |");
puts("| 1-write an information about a courses |");
puts("| 2-remove a given element (by name) |");
while(operations!=666) {
printf("\nEnter a number of operation: ");
scanf("%d", &operations);
switch(operations) {
case 1: first_look(); break;
case 2: deleting(); break;
}
}
return 0;
}