Добавить элемент в двухсвязный список
в общем есть проблема с добавление элемента в двухсвязный список. Есть следующая функция:
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 и ничего не происходит далее. А должно возвращать в меню.
Прикладываю скриншот ниже:
