c语言,莫名陷入死循环,大神们戳进来
全部函数有点复杂,这是其中一个函数,k输入字母,就会陷入死循环要主函数的,可以再提供voidshowNumber(seat*seats){intk=0;do{intcou...
全部函数有点复杂,这是其中一个函数,k输入字母,就会陷入死循环
要主函数的,可以再提供
void showNumber(seat * seats)
{
int k = 0;
do{
int count = 0;
for (int i = 0; i < 12; i ++) {
if (seats[i].flag == 0) {
count ++;
}
}
printf("还有%d个空座位\n",count);
printf("\n刷新信息,请输入1;返回主菜单输入2\n");
scanf("%d",&k);
}
while (k != 2);
} 展开
要主函数的,可以再提供
void showNumber(seat * seats)
{
int k = 0;
do{
int count = 0;
for (int i = 0; i < 12; i ++) {
if (seats[i].flag == 0) {
count ++;
}
}
printf("还有%d个空座位\n",count);
printf("\n刷新信息,请输入1;返回主菜单输入2\n");
scanf("%d",&k);
}
while (k != 2);
} 展开
2个回答
展开全部
scanf("%d", &k),
当输入字符的时候,输入缓存内没有数字,scanf就读取不成功,k仍然保留了原来的值,下次再次调用scanf时,由于输入缓存中仍然还残留上次输入的字符,所以仍然读取不成功,k仍然保留原来的值。用fflush(stdin)清空一下缓存就可以了。
void showNumber(seat * seats)
{
int k = 0;
do{
int count = 0;
for (int i = 0; i < 12; i ++) {
if (seats[i].flag == 0) {
count ++;
}
}
printf("还有%d个空座位\n",count);
printf("\n刷新信息,请输入1;返回主菜单输入2\n");
fflush(stdin); /*这里清空一下缓存*/
scanf("%d",&k);
}
while (k != 2);
}
展开全部
while中判断的是k!=2, 但k从定义为int k=0后再没修改过,所以k!=2是一直为true的,所以do就要一直执行了,即死循环。
需要在do中对k值进行修改,比如k++;
需要在do中对k值进行修改,比如k++;
追问
我直接输入的k
追答
哦,不好意思哈,没注意。
又看了下你的描述, scanf的时候是期望读入一个int的,如果你输入字母则scanf会错误返回,即k不会被输入,还是上次的值,同时输入的字母还是在scanf的缓冲区内, 所以while继续执行,又要执行scanf,由于上次输入的字母还在缓冲区内容,所以scanf继续错误返回而k不能被输入,继续while... 这样就死循环了。
解决办法很简单:在scanf("%d", &k);后加一行: fflush(stdin); 来清空scanf的缓冲区即可。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询