求有空的大神帮忙调试一下,在输入任何一个字母的时候就会出现死循环,问题何在?
#include <stdio.h>#include <malloc.h>
#include <conio.h>
#include <stdlib.h>
#include <ctime>
#define NULL 0
typedef struct Node //定义每个结点的类型
{ int m; //每个人所拥有的密码
int n; //每个人的位序
struct Node *next;
}Node,*Linklist;
Linklist create(int z) //生成z个结点的循环单链表,z为总人数
{ int i,mm;
Linklist r,s,H=NULL;
for(i=1;i<=z;i++)
{ printf("请输入NO.%d的密码=",i);
scanf("%d",&mm);
s=(Linklist)malloc(sizeof(Node));
s->n=i;
s->m=mm;
if(H==NULL) //从链表的第一个节点插入
{ H=s;
r=H;
}
else //链表的其余节点插入
{ r->next=s;
r=s; //r后移
}
} //for结束
r->next=H; //生成循环单链表
return H;
}
void search(Linklist H,int m0,int z)//用循环链表实现报数问题
{ int count=1; //count为累计报数人数计数器
int num=0; //num为标记出列人数计数器
Linklist pre,p;
p=H;
printf("出列的顺序为:");
while(num<z)
{
do{ count++;
pre=p;
p=p->next;
}while(count<m0);
pre->next=p->next;
printf("%d ",p->n);
m0=p->m;
free(p);
p=pre->next;
count=1;
num++;
} //while结束
}
void clean()
{ int system(const char *string);
int inquiry;
printf("若要清除上一次操作记录请选择(1.清屏/2.不清屏)...\n");
scanf("%d",&inquiry);
if(inquiry ==1)
system("cls");
}
void time()
{ time_t timer ;/*时间*/
struct tm *ptrtime;/*指向struct tm的指针*/
timer = time( NULL ) ;/*调用time()函数获取当前时间*/
ptrtime = localtime( &timer ) ;/*调用localtime()函数将获得的系统时间转化为指向struct tm的指针指向的结构体*/
printf("\n系统时间: %s",asctime( ptrtime ) ) ;/*用asctime()将结构体转化为字符串输出*/
}
void text()
{ int m0,z,i,k=1; //k用来阻止第一次进入程序清屏操作
int choose;
Linklist H;
bool chooseFlag=false;
while(1)
{ if(k!=1)
{clean();
time();}
k++;
while(!chooseFlag)
{ printf(" ============欢迎进入排序系统计设——约瑟夫环问题============\n");
printf(" * 1.输入约瑟夫环数据 *\n");
printf(" * 2.什么是约瑟夫环? *\n");
printf(" * 3.退出系统 *\n");
printf(" ..............................................................\n");
printf("请输入相应的数字进行选择: ");
scanf("%d",&choose);
for(i=1;i<=4;i++)
{ if(choose==i)
{ chooseFlag=true;
break;
}
else chooseFlag=false;
}
if(!chooseFlag)
printf("输入错误!\n");
} //end while(!chooseFlag)
if(choose==1) //if 开始
{ printf("请输入一个小于30的整数表示人数:");
scanf("%d",&z);
while(z>30||z<1)
{ printf("超过最大输入人数! 请重新输入整数: ");
scanf("%d",&z);
}
H=create(z);//函数调用
printf("请输入初始密码m0: ");
scanf("%d",&m0);//
search(H,m0,z);
printf("\n\n");
}
else if(choose==2)
{ printf("\n约瑟夫环问题:设有n个人,其编号分别为1,2,3,…,n,安装编号顺序顺时针围坐一圈。选定一个正整数m,从第一个人开始顺时针报数,报到m时,则此人出列,然后从他的下一个人从1重新报数,依此类推,直到所有人全部出列为止,求出列的顺序。\n\n");
}
else if(choose==3)
{ printf("程序结束!\n");
break;
}
else
{ printf("错误!\n");
}//end if
chooseFlag=0;
}//end while(1)
}
void main()
{ time();
text();
}