猜拳问题我程序正常运行了但是不知道为什么再输入猜拳手势的时候连续执行了两次提示语 printf("Please enter a gesture\n");希望有人能解答一下

问题遇到的现象和发生背景

程序正常运行了但是不知道为什么开始输入猜拳手势的时候连续执行了两次提示语 printf("Please enter a gesture\n");希望有人解答一下,谢谢
下面是这道程序题的题目
大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示:
现要求你编写一个稳赢不输的程序,根据对方的出招,给出对应的赢招。但是!为了不让对方输得太惨,你需要每隔K次就让一个平局。
输入格式:
输入首先在第一行给出正整数K(≤10),即平局间隔的次数。随后每行给出对方的一次出招:ChuiZi代表“锤子”、JianDao代表“剪刀”、Bu代表“布”。End代表输入结束,这一行不要作为出招处理。
输出格式:
对每一个输入的出招,按要求输出稳赢或平局的招式。每招占一行。

用代码块功能插入代码,请勿粘贴截图
#include
#include

int main()
{
    int k=0,y;
    char str[10],a[]={"chuizi"},b[]={"jiandao"},c[]={"bu"},d[]={"end"};
    printf("Times of draw k interval (k<=10)\n");
    scanf("%d",&k);
    
    for(y=0;k<=10&&k!=0;y++){
        printf("Please enter a gesture\n");
        gets(str);
        if(strcmp(str,a)==0){
            if(y%k==0){
                printf("%s\n",a);
            }else{
                printf("%s\n",c);
            }
        }else if(strcmp(str,b)==0){
            if(y%k==0){
                printf("%s\n",b);
            }else{
                printf("%s\n",a);
            }
        }else if(strcmp(str,c)==0){
            if(y%k==0){
                printf("%s\n",c);
            }else{
                printf("%s\n",b);
            }
        }else if(strcmp(str,d)==0){
            break;
        }
    }
    
}

运行结果及报错内容

img

因为你读入了2之后,没有代码读入换行符,导致换行符驻留在缓冲区里
然后循环中读入了换行符,跟下面任何都匹配不上,就又走回开头,所以连续打印2次
在scanf("%d",&k);下一行加个getchar就好了

因为你输入太快了,导致看起来连续打印了两次,正常等程序打印了之后再输入就么没问题了