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 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)