Не работает удаление простых чисел.Не выводит строку "После удаления простых чисел получаем:".Как быть?

#include <iostream>
#include <windows.h>
using namespace std;
struct node //описание узла
{
    int info; //информационное поле
    node* next; //поле для связи с другим узлом
};
node* first(int d) //начальное формирование очереди
{
    node* p = new node; //выделение памяти под новый узел
    p->info = d; 
    p->next = NULL; //следующий элемент за первым - пустой
    return p;
}

void add(node **pend, int d) //добавление элемента в очередь
{
    node* p = new node; //выделение памяти под новый узел
    p->info = d;
    p->next = NULL; //следующего нет - указатель ставим на NULL
    (*pend)->next = p;
    *pend = p;
}

void print(const node* pbeg) //распечатка элементов очереди
{
    cout << endl;
    while (pbeg != NULL) //пока не конец
    {
        cout << pbeg->info << " "; //печать значения текущего узла
        pbeg = pbeg->next; //перемещаемся к следующему узлу
    }
    cout << endl;
}
void del(node** pbeg) //удаление простых чисел из очереди
{
    node* temp, * prev;
    temp = *pbeg; //устанавливаем указатель temp на начало очереди
    prev = *pbeg; //указатель предыдущего узла для текущего
    while (temp != NULL)
    {
        if ((temp->info) > 0) //если нашли узел с заданным значением
        {
            for (int i = 2; i < sqrt((temp->info)); i++) //счетчик для определения простоты числа
            {
                if ((temp->info) % i != 0)
                {
                    if (temp == (*pbeg)) //если это начало очереди
                    {
                        (*pbeg) = temp->next;
                        delete temp;
                        temp = *pbeg;
                    }
                    else //если найденный узел не является началом
                    {
                        prev->next = temp->next;
                        delete temp;
                        temp = *pbeg;
                    }
                }
            }
        }
        else //если узел не содержал заданного значения
        {
            prev = temp;
            temp = temp->next;
        }
    }
}

void clear(node** pbeg) //очистка очереди (удаление всех узлов)
{
    node* temp;
    while ((*pbeg)!= NULL)
    {
        temp = (*pbeg)->next; //устанавливаем temp на следующий узел
        delete* pbeg; //удаляем текущий узел
        *pbeg = temp; //устанавливаем указатель начала на temp
    }
}

int main()
{
    setlocale(LC_ALL, "Russian");
    node* pbeg, * pend; //указатели на начало и на конец очереди
    int w;
    char ch;
    cout << "Введите число: " << endl;
    cin >> w;
    pbeg = first(w); //создание первого узла очереди
    pend = pbeg;
    cout << "Ввести еще одно число? (y/n)" << endl;
    cin >> ch;
    while (ch != 'n')
    {
        cout << "Введите число: " << endl;
        cin >> w;
        add(&pend, w); //добавление нового узла в очередь
        cout << "Ввести еще одно число? (y/n) " << endl;
        cin >> ch;
    }
    print(pbeg);
    del(&pbeg); //удаление простых чисел из очереди
    cout << "После удаления простых чисел получаем: ";
    print(pbeg); //распечатка очереди после удаления
    clear(&pbeg);
}

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