0

私はこのコードを適切に動作させるために約 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;    
}

どんな助けでも大歓迎です。

4

1 に答える 1