bronya1465124479 2022-11-08 16:12 采纳率: 82.6%
浏览 40
已结题

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

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

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

用代码块功能插入代码,请勿粘贴截图
#include<stdio.h>
#include<string.h>

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条回答 默认 最新

  • 於黾 2022-11-08 16:19
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 11月17日
  • 已采纳回答 11月9日
  • 创建了问题 11月8日

悬赏问题

  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀
  • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100
  • ¥15 关于#hadoop#的问题
  • ¥15 (标签-Python|关键词-socket)
  • ¥15 keil里为什么main.c定义的函数在it.c调用不了
  • ¥50 切换TabTip键盘的输入法
  • ¥15 可否在不同线程中调用封装数据库操作的类
  • ¥15 微带串馈天线阵列每个阵元宽度计算