
为什么我在执行n=4时,老是结束呢?求大神。 #include<stdio.h> #include<stdlib.h> #define MaxSize 100
typedefstruct{intdata[10];intfront,rear;}SqQueue;voidInitQueue(SqQueue*&q){q=(SqQueue...
typedef struct
{ int data[10];
int front,rear;
}SqQueue;
void InitQueue(SqQueue *&q)
{ q=(SqQueue *)malloc(sizeof(SqQueue));
q->front=q->rear=0;
}
int enQueue(SqQueue *&q,int i)
{ if((q->rear+1)%MaxSize==q->front)
return 0;
q->rear=(q->rear+1)%MaxSize;
q->data[q->rear]=i;
return 1;
}
int deQueue(SqQueue *&q,int &i)
{ if(q->front==q->rear)
return 0;
q->front=(q->front+1)%MaxSize;
i=q->data[q->front];
return 1;
}
void main()
{ int i=0,j=0,n;
SqQueue *q;
InitQueue(q);
printf("4,不在排队,余下病人依次就诊\n");
printf("5,下班\n");
printf("请选择1,2,3,4,5中一项\n");
scanf("%d",&n);
flag: while(n<=5&&n>=1)
{ switch(n)
{ case 1: { if((q->rear+1)%MaxSize==q->front)
{ printf("排队人数过多,系统暂不支持排队,敬请谅解,请选择其他服务\n");
putchar('\n');
break;
}
printf("输入新一位病号\n");
scanf("%d",&i);
putchar('\n');
enQueue(q,i);
break;
}
case 2: { if(q->front==q->rear)
{ printf("当前无排队病人,请选择其他服务\n");
putchar('\n');
break;
}
deQueue(q,i);
printf("请%d号的病人就诊\n",i);
putchar('\n');
break;
}
case 3: { if(q->front==q->rear)
{ printf("当前无排队病人,请选择其他服务\n");
putchar('\n');
break;
}
printf("输出现有等待排队的病人序号\n");
while(q->front!=q->rear)
{ j++;
deQueue(q,i);
printf("%d\n",i);
}
putchar('\n');
printf("分析出现有%d个病人在排队\n",j);
putchar('\n');
while(j!=0)
{ q->front=(q->front-1)%MaxSize;
j--;
}
break;
}
case 4: { if(q->front==q->rear)
{ printf("当前无排队病人,请选择其他服务\n");
putchar('\n');
break;
}
printf("输出现有等待排队的病人序号\n");
while(q->front!=q->rear)
{ j++;
deQueue(q,i);
printf("%d\n",i);
}
putchar('\n');
printf("分析出现有%d个病人在排队\n",j);
putchar('\n');
while(j!=0)
{ q->front=(q->front-1)%MaxSize;
j--;
}
break;
}
case 5: {printf("下班时间,停止运行\n");
exit(0);
}
}
n=12;
}
printf("请选择您需要的服务\n");
putchar('\n');
scanf("%d",&n);
if(n>=1&&n<=3)
goto flag;
} 展开
{ int data[10];
int front,rear;
}SqQueue;
void InitQueue(SqQueue *&q)
{ q=(SqQueue *)malloc(sizeof(SqQueue));
q->front=q->rear=0;
}
int enQueue(SqQueue *&q,int i)
{ if((q->rear+1)%MaxSize==q->front)
return 0;
q->rear=(q->rear+1)%MaxSize;
q->data[q->rear]=i;
return 1;
}
int deQueue(SqQueue *&q,int &i)
{ if(q->front==q->rear)
return 0;
q->front=(q->front+1)%MaxSize;
i=q->data[q->front];
return 1;
}
void main()
{ int i=0,j=0,n;
SqQueue *q;
InitQueue(q);
printf("4,不在排队,余下病人依次就诊\n");
printf("5,下班\n");
printf("请选择1,2,3,4,5中一项\n");
scanf("%d",&n);
flag: while(n<=5&&n>=1)
{ switch(n)
{ case 1: { if((q->rear+1)%MaxSize==q->front)
{ printf("排队人数过多,系统暂不支持排队,敬请谅解,请选择其他服务\n");
putchar('\n');
break;
}
printf("输入新一位病号\n");
scanf("%d",&i);
putchar('\n');
enQueue(q,i);
break;
}
case 2: { if(q->front==q->rear)
{ printf("当前无排队病人,请选择其他服务\n");
putchar('\n');
break;
}
deQueue(q,i);
printf("请%d号的病人就诊\n",i);
putchar('\n');
break;
}
case 3: { if(q->front==q->rear)
{ printf("当前无排队病人,请选择其他服务\n");
putchar('\n');
break;
}
printf("输出现有等待排队的病人序号\n");
while(q->front!=q->rear)
{ j++;
deQueue(q,i);
printf("%d\n",i);
}
putchar('\n');
printf("分析出现有%d个病人在排队\n",j);
putchar('\n');
while(j!=0)
{ q->front=(q->front-1)%MaxSize;
j--;
}
break;
}
case 4: { if(q->front==q->rear)
{ printf("当前无排队病人,请选择其他服务\n");
putchar('\n');
break;
}
printf("输出现有等待排队的病人序号\n");
while(q->front!=q->rear)
{ j++;
deQueue(q,i);
printf("%d\n",i);
}
putchar('\n');
printf("分析出现有%d个病人在排队\n",j);
putchar('\n');
while(j!=0)
{ q->front=(q->front-1)%MaxSize;
j--;
}
break;
}
case 5: {printf("下班时间,停止运行\n");
exit(0);
}
}
n=12;
}
printf("请选择您需要的服务\n");
putchar('\n');
scanf("%d",&n);
if(n>=1&&n<=3)
goto flag;
} 展开
1个回答
展开全部
很正常啊!因为4不在倒数第三行if(n>=1&&n<=3)逻辑表达式范围内,判断结果肯定为“假”,程序流程就不会由goto flag返回到while(n<=5&&n>=1)了。遇到主函数的最后的}就结束了……哈哈!
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询