Sy_Faker 2019-11-29 10:53 采纳率: 16.7%
浏览 499
已采纳

字符串猜拳要稳赢,出问题了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 用twincat控制!
  • ¥15 请问一下这个运行结果是怎么来的
  • ¥15 单通道放大电路的工作原理
  • ¥30 YOLO检测微调结果p为1
  • ¥20 求快手直播间榜单匿名采集ID用户名简单能学会的
  • ¥15 DS18B20内部ADC模数转换器
  • ¥15 做个有关计算的小程序
  • ¥15 如何用MATLAB实现以下三个公式(有相互嵌套)
  • ¥30 关于#算法#的问题:运用EViews第九版本进行一系列计量经济学的时间数列数据回归分析预测问题 求各位帮我解答一下
  • ¥15 setInterval 页面闪烁,怎么解决