Добавить элемент в двухсвязный список

в общем есть проблема с добавление элемента в двухсвязный список. Есть следующая функция:

void addelem(void) {
    spis *p, *pn;
    double sqx;
    char answer[55];

    pn = (spis *)malloc(sizeof(spis)); // pn – указатель на новую структуру
    cout << "После какого элемента вставить ряд?";
    cin >> answer;
    printf("\nВведите: название, школу, количество, площадь >");
    scanf("%s", &pn->name);
    scanf_s("%f", &pn->sc);
    scanf_s("%f", &pn->cnt);
    scanf_s("%lf", &sqx); pn->sq = sqx;
    p = head;
    while (p != NULL) {
        if (strcmp((p->name), answer) == 0) // если чнайдена заданная структура
        {
            if (p == head) {
                pn->v1 = NULL;// если найденная запись - первая
                pn->v2 = p;
                p->v1 = pn;
                head = pn;
            }
            else if (p == tail) {// если структура вставляется в конец списка
                pn->v1 = tail;
                pn->v2 = NULL;
                p->v2 = pn;
                tail = pn;
            }
            else
            {
                // если структура вставляется в средину списка
                pn->v1 = p->v1;
                pn->v2 = p;
                p->v1->v2 = pn;
                p->v1 = pn;
            }
            // если структура вставляется в начало списка
        }
        else p = p->v2;
    }cout << "Элемент " << answer << " добавлен" << endl;
}

А также данная структура:

struct spis
{
    char name[45];
    float sc;
    float cnt;
    double sq;
    struct spis *v1; // v1 – указатель на предыдущую структуру
    struct spis *v2;
};
struct spis *head, *tail;

Пытаюсь создать список, далее найти ряд по букве, которая задается в char name, спрашиваю про новый ряд, ввожу его, нажимаю Enter и ничего не происходит далее. А должно возвращать в меню. Прикладываю скриншот ниже: введите сюда описание изображения


Ответы (0 шт):