Помогите найти ошибку в программе!

Помогите найти ошибку в программе!
Программа работает не правильно, получается что после ввода чисел в первом алгоритме, второй алгоритм перестает работать. Вот само условие задачи: Создать на языке С++ два линейных списка: один от первого элемента к последнему, второй от последнего к первому. Оба списка распечатать, а в конце уничтожить. В качестве информационных частей использовать: час, минута, секунда.

#include

using namespace std;

struct TIME
{
unsigned hour,minute,second;
};

struct node
{
TIME Head;
node * Tail;
};
node * create_1()
{
setlocale(LC_ALL,"");
node *p,*q;
TIME x;
p=NULL;
cout< <"Введите часы, минуты и секунды : n";
while (cin>>x.hour>>x.minute>>x.second)
{
q=new node;
q->Head=x;
q->Tail=p;
p=q;
}
cin.clear(0);
return p;
}

node *create_2()
{
node *p,*q;
TIME x;
cout< <"Введите часы, минуты и секунды : n";
if (!(cin>>x.hour>>x.minute>>x.second))
return NULL;
p=new node;
p->Head=x;
q=p;
while (cin>>x.hour>>x.minute>>x.second)
{
q->Tail=new node;
q=q->Tail;
q->Head=x;
}
q->Tail=NULL;
cin.clear(0);
return p;
}

void destroy (node *b)
{
node *p;
while (b)
{
p=b;
b=b->Tail;
delete p;
}
}

void print(node *b)
{
node *q=b;
while (q!=NULL)
{
cout < < q->Head.hour < < " "<< q->Head.minute < < " "<Head.second < < " "<<"n";
q=q->Tail;
}
}

void main()
{
setlocale(LC_ALL, "");
node * b;
b = create_2();
print(b);
destroy(b);

node * a;
a = create_1();
print(a);
destroy(a);

}
system("pause");

  • Заменить cin.clear(0) на cin.clear()
    Программа в принципе рабочая:

    Для окончания ввода нужно ввести признак конца файла, в консольном окне Windows нужно на новой строке ввести комбинацию Ctrl-Z и нажать Enter.

  • Нашел блин где спрашивать
    [ссылка появится после проверки модератором]
    там помогут