Sy_Faker 2019-11-29 10:53 采纳率: 25%
浏览 498
已采纳

字符串猜拳要稳赢,出问题了QAQ

稳赢

现要求你编写一个稳赢不输的程序,根据对方的出招,给出对应的赢招。但是!为了不让对方输得太惨,你需要每隔K次就让一个平局。

输入格式:

输入首先在第一行给出正整数K(≤10),即平局间隔的次数。随后每行给出对方的一次出招:ChuiZi代表“锤子”、JianDao代表“剪刀”、Bu代表“布”。End代表输入结束,这一行不要作为出招处理。

输出格式:

对每一个输入的出招,按要求输出稳赢或平局的招式。每招占一行。

输入样例:

2

ChuiZi

JianDao

Bu

JianDao

Bu

ChuiZi

ChuiZi

End

输出样例:

Bu

ChuiZi

Bu

ChuiZi

JianDao

ChuiZi

Bu
我的做法程序清单:

#include<stdio.h>
#include<string.h>
int main()
{
    int k;
    scanf("%d",&k);
    char honhu[10];
    for(int i=0;;i++)
    {
        gets(honhu);
        getchar();

        if(strcmp(honhu,"End")==0)break;
        if(k%i!=0)
        {
     if(strcmp(honhu,"Bu")==0)printf("JianDao\n");
     else if(strcmp(honhu,"JianDao")==0)printf("ChuiZi\n");
     else if(strcmp(honhu,"ChuiZi")==0)printf("Bu\n");
        }
        else
        {
     if(strcmp(honhu,"Bu")==0)printf("Bu\n");
     else if(strcmp(honhu,"JianDao")==0)printf("JianDao\n");
     else if(strcmp(honhu,"ChuiZi")==0)printf("ChuiZi\n");
        }
        memset(honhu,'\0',sizeof(honhu));
    }
}

运行终端会停止工作,求救~

  • 写回答

1条回答 默认 最新

  • 速趴赛亚金 2019-11-29 16:21
    关注

    看了一下,你这里头问题多多
    1.你这个代码完全不能往honhu中输入字符串,为什么?原因就是sacnf()输入了数字之后,缓冲区还有一个回车键的,执行gets()时,会直接把缓冲区的回车键拿进去了,相当于往
    honhu中读入了空串,解决办法就是在scanf()之后执行一次getchar()以便舍去回车键;第二:gets()函数在执行之后会把最后写到缓冲区的回车键主动从缓冲区中剔除的,所以gets()之后不需要getchar()的。
    2.第二点也就是导致你程序奔溃的原因,呵呵,那就是数学问题了,i=0时,k%i!=0这个判断合理吗?其他逻辑我就没看了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题