qq_43889776 2018-11-30 13:09 采纳率: 0%
浏览 516

C语言小游戏多次循环偶尔几次会出bug,求解?

  • 编了一个猜单词的吊小人小游戏,每次运行时开始几个猜起来都没问题,循环十次左右之后就会出现bug(原本猜之前会输出一行下划线,出bug时就只会出来一个)。
  • bug循环结束后可能恢复正常,再循环几次后又会出现bug。
  • 求大佬帮忙看一看,实在是不明白为什么啊QAQ
  • 代码如下:
  • (谢谢大佬!)
#include <stdio.h.>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#define draw1 printf("________\n|   |\n|\n|\n|\n|\n|______\n|      |____\n|___________|\n")
#define draw2 printf("________\n|   |\n|   o\n|\n|\n|\n|______\n|      |____\n|___________|\n")
#define draw3 printf("________\n|   |\n|   o\n|  /\n|\n|\n|______\n|      |____\n|___________|\n")
#define draw4 printf("________\n|   |\n|   o\n|  /|\n|\n|\n|______\n|      |____\n|___________|\n")
#define draw5 printf("________\n|   |\n|   o\n|  /|\n|   |\n|\n|______\n|      |____\n|___________|\n")
#define draw6 printf("________\n|   |\n|   o\n|  /|\\   \n|   |\n|\n|______\n|      |____\n|___________|\n")
#define draw7 printf("________\n|   |\n|   o\n|  /|\\   \n|   |\n|  /\n|______\n|      |____\n|___________|\n")
#define draw8 printf("________\n|   |\n|   o\n|  /|\\  \n|   |\n|  / \\   \n|______\n|      |____\n|___________|\n")
void puta(char a[100],int n)
{
    int m;
    for(m=0;m<n;m++)
        printf("%c ",a[m]);
    printf("\n");
}
void draw(char a[100],int n,int i)
{
    switch(i)
                {
                case 0: draw1; break;
                case 1: draw2; break;
                case 2: draw3; break;
                case 3: draw4; break;   
                case 4: draw5; break;
                case 5: draw6; break;
                case 6: draw7; break;
                }
            printf("待填单词:    ");
            puta(a,n);
}
void yn(int b,char c,char a[100])
{
    int d,n;
    n=0;
    for(d=0;d<b;d++)
    {
        if (a[d]==c)
            n=1;
    }
    if(n==1)
        printf("您已输入过%c(猜中),请重新输入:",c);
    else
        printf("您已输入过%c(未中),请重新输入:",c);
}
void main()
{
    int b,c,d,e,f,g,h,i,j,k,l,p,t;
    char q='y',r;
    char a1[][15]={"university","computer","language","homework","economics","mathematics","textbook","hamburger","chocolate","dumpling"};
    char a2[10][100]={'\0'};
    char a3[100]={'\0'};
    char a4[100]={'\0'};
    char y[100]={'\0'};
    e=0,i=0,k=0,h=0;
    srand((unsigned)time(0)); 
    b=rand()%10;
    c=strlen(a1[b]);
    while(q=='y')
    {
    printf("开始游戏...\n");
    draw1;
    printf("\n待猜单词:    ");
    for(d=0;d<c;d++)
        a3[d]='_';
    puta(a3,c);
    printf("\n第1次字母猜测:");
    do{
        do
        {
            scanf("%s",a2[e]);
            if((strlen(a2[e])==1)&&(a2[e][0]>='a')&&(a2[e][0]<='z'))
            {
                f=a2[e][0];
                for(l=0,p=0;l<c;l++)
                {
                    if(f==a4[l])
                        p=1;
                }
                if(p==1)
                {
                    yn(c,f,a1[b]);
                }
                else
                {
                    a4[e]=f;
                    break;
                }
            }
            else
                printf("第%d次字母猜测:",e+1);
        }
        while(1);
        h=0;
        for(g=0;g<c;g++)
        {
            if(a1[b][g]==f)
            {
                a3[g]=f;
                h=1;
            }
            else
                ;
        }
        if(h==1)
            draw(a3,c,i);
        else
        {
            i++;
            if(i<7)
                draw(a3,c,i);
            else
            {
                draw8;
                printf("You Lost! The man is HANGED.\n真实单词:");
                puta (a1[b],c);
                printf("你的猜测序列:");
                puta (a4,e+1);
                break;
            }
        }
        k=0;
        for(j=0;j<c;j++)
        {
            if(a3[j]=='_')  
                k=1;
        }
        if(k==0)
        {
            printf("You Win!\n");
            printf("你的猜测序列:");
            puta (a4,e+1);
            break;
        }
        e++;
        printf("第%d次字母猜测:",e+1);
    }
    while(1);
    do
    {
        printf("想再玩一次吗?(y/n)\n");
        scanf(" %c%c",&q,&r);
    }
    while((r!='\n')|((q!='y')&&(q!='n')));
    if(q=='n')
        break;
    for(t=0;t<10;t++)
        memset(a2[t],0,sizeof(a2[t]));
    memset(a3,0,sizeof(a3)); 
    memset(a4,0,sizeof(a4)); 
    memset(y,0,sizeof(y)); 
    e=0,i=0,k=0,h=0,t=0;
    srand((unsigned)time(0)); 
    b=rand()%10;
    c=strlen(a1[b]);
    }
    system ("pause");
}
  • 写回答

1条回答 默认 最新

  • dabocaiqq 2018-11-30 13:10
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 Arcgis相交分析无法绘制一个或多个图形
  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)