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 win2012磁盘空间不足,c盘正常,d盘无法写入
  • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计
  • ¥70 PlayWright在Java上连接CDP关联本地Chrome启动失败,貌似是Windows端口转发问题
  • ¥15 帮我写一个c++工程
  • ¥30 Eclipse官网打不开,官网首页进不去,显示无法访问此页面,求解决方法
  • ¥15 关于smbclient 库的使用
  • ¥15 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启