循环链表中运行到cin为什么卡住了
#include<stdio.h>#include<iostream>
#include<malloc.h>
using namespace std;
typedef struct node //循环双向链表
{
int data,len; //数据
struct node *prior;//前驱
struct node *next; //后继
}Node;
void create(Node *L); //建立双向链表
void shuchu(Node *L); //输出顺序表中的元素的值
void insert(Node *L,int i,int x); //在位置i插入元素x
main()
{ char ch;
int a,b;
Node *L; //表头指针
create(L);
cout<<"输入'A'或'a'是插入元素"<<endl;
cout<<"输入'#'结束"<<endl;
cin>>ch;
for(;ch!='#';cin>>ch)
{
switch (ch)
{
case 'A': cout<<"在位置i插入元素x,输入i和x: "<<endl;
cin>>a;cin>>b;
insert(L,a,b);break;
}
}
}
void create(Node *L) //建立双向单链表
{
Node *p;
Node *q;
cout<<"建立单链表,请输入数据: ";
L=(Node*)malloc(sizeof(Node));
cin>>L->data; cout<<endl;
L->prior=L->next=NULL; L->len=1; q=L;
for(;;)
{
cout<<"继续输入数据(若输入非数字则结束): ";
p=(Node*)malloc(sizeof(Node));
cin>>p->data;
if(cin.fail()) //cin.fail()函数:如果输入的是int类型,则操作成功,返回假值 0,操作失败,返回真值 1
/* 如果输入的不是数字 */
{ cout<<"输入非数字,单链表建立完成"<<endl;break; }
else
{
q->next=p;
p->prior=q;
L->len++;
q=p;
}
}
p->next=L; L->prior=p;
shuchu(L);
}
void shuchu(Node *L)
{ int i,j;
Node *p;
p=L;
j=L->len;
cout<<"现在链表中的元素是: ";
for(i=0;i<j;i++)
{
cout<<" "<<p->data;
p=p->next;
}
cout<<endl;
}
void insert(Node *L,int i,int x)
{
int j;
Node *p,*q;
q=(Node*)malloc(sizeof(Node));
q->data=x;
p=L;
for(j=0;j<i-2;j++) p=p->next;
p->next->prior=q;
q->next=p->next;
p->next=q;
q->prior=p;
L->len++;
shuchu(L);
}