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);

}
展开
 我来答
百度网友83cdc1c
推荐于2016-07-31 · TA获得超过5792个赞
知道大有可为答主
回答量:1907
采纳率:100%
帮助的人:853万
展开全部

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);

}
memberwin
2015-07-22 · TA获得超过3903个赞
知道大有可为答主
回答量:1000
采纳率:100%
帮助的人:512万
展开全部
while中判断的是k!=2, 但k从定义为int k=0后再没修改过,所以k!=2是一直为true的,所以do就要一直执行了,即死循环。
需要在do中对k值进行修改,比如k++;
追问
我直接输入的k
追答
哦,不好意思哈,没注意。
又看了下你的描述, scanf的时候是期望读入一个int的,如果你输入字母则scanf会错误返回,即k不会被输入,还是上次的值,同时输入的字母还是在scanf的缓冲区内, 所以while继续执行,又要执行scanf,由于上次输入的字母还在缓冲区内容,所以scanf继续错误返回而k不能被输入,继续while... 这样就死循环了。
解决办法很简单:在scanf("%d", &k);后加一行: fflush(stdin); 来清空scanf的缓冲区即可。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式