私はこのコードを適切に動作させるために約 5 時間試行してきました。コードは何時間ものインターネット調査に基づいて作成されています。何度か変更しましたが、そのすべてでセグメンテーション違反が発生したため、これが実行される唯一のバージョンです。何が起こっているかというと、コードが循環し、削除したい要素だけでなく、その前のすべての要素を削除しているということです。したがって、最後の要素を削除したい場合は、リスト内のすべてが削除されます。または、2 番目の要素を削除する場合は、1 番目と 2 番目の要素を削除します。何故か入力された全ての名前がトップネームだと思います。
static void menu_delete_employee(void)
{
char deletename[MAX_NAME_LENGTH+1];
char namecheck[MAX_NAME_LENGTH+1];
int errorcheck = 0;
int foundit = 0;
fprintf(stderr, "Enter the name of the employee you wish to delete\n");
gets(deletename);
employee_list = top;
employee_list->name;
do
{
strcpy (namecheck, employee_list->name);
printf("namecheck = %s\n", namecheck);
errorcheck = (strcmp (namecheck, deletename));
printf("errorcheck = %i\n", errorcheck);
switch (errorcheck)
{
case 0:
{
printf("This is the right name\n");
foundit = 1;
if (employee_list->prev == NULL)
{
printf("top name\n");
top = employee_list->next;
}
else
{
if (employee_list->next == NULL)
{
printf("last one\n");
temp = employee_list->prev;
temp-> next = NULL;
free (employee_list);
}
else
{
printf("somewhere in the middle");
temp = employee_list->prev;
temp->next = employee_list->next;
employee_list->next->prev = temp;
free (employee_list);
}
}
printf("delete successful\n");
break;
}
default:
{
printf("not this one\n");
errorcheck = 0;
employee_list = employee_list->next;
break;
}
}
}
while (foundit == 0);
if (foundit == 0)
printf("Name not recognised\n.");
return;
}
どんな助けでも大歓迎です。