肖大帅呀 2019-06-30 17:45 采纳率: 0%
浏览 389

编译运行都没有问题,函数运行到中途就自动结束了程序,小白一个求指教,会报with return value 3221225477

#include

struct TU{
int h,l;
};

int mmax(int x,int y)
{
if(x>y) return x;
else return y;
}

int max(int a,int b,int c,int d)
{
int m;
m=mmax(a,b);
m=mmax(m,c);
m=mmax(m,d);
return m;
}

void koko(struct TU *a,int b[15][10],int c){
int k=0,i=0,j,m[4],n,q[4];
for(k=0;k<4;k++){
a[k].l=a[k].l+(c-1);
printf("q=%d\n",q[k]);
}//最后运行在这里结束
for(k=0;k<4;k++){
for(i=0;i<16;i++){
if(b[i][a[k].l]==1){
m[k]=i;
break;//
}
}
}
n=max(m[1],m[2],m[3],m[0])-1;

for(k=0;k<4;k++){
    b[n-a[k].h][a[k].l]=1;
}

}

void main(){
struct TU fang[4]={0};
struct TU fangg;
fangg=&fang;
int a[15][10];
int b[4][4];
int i,j,k=0;
int begin;
scanf("%d",&begin);
FILE
fp1=fopen("eluosia.txt","r");
FILE* fp2=fopen("eluosib.txt","r");
if(fp1==NULL&&fp2==NULL){
printf("无文件");
return -1;
}
for(i=0;i<15;i++){
for(j=0;j<10;j++){
fscanf(fp1,"%d",&a[i][j]);
}
fscanf(fp1,"\n");
}
fclose(fp1);
for(i=0;i<4;i++){
for(j=0;j<4;j++){
fscanf(fp2,"%d ",&b[i][j]);
}
fscanf(fp2,"\n");
}
fclose(fp2);/*
for(i=0;i<4;i++){
for(j=0;j<4;j++){
if(b[i][j]==1){
fang[k].h=i;
fang[k].l=j;
printf("%d%d\n",fang[k].h,fang[k].l);
k++;
}
}
}

koko(fangg,a[15][10],begin);

for(i=0;i<15;i++){
    for(j=0;j<10;j++){
        printf("%d",a[i][j]);
    }
    printf("\n");
}

}


  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-10 16:50
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    这段代码的目的是在C语言中实现一个简单的游戏。玩家通过点击屏幕上的方块来移动游戏角色。但是,在某些情况下,程序可能会出现错误,并且输出错误信息。

    首先,让我们分析你的代码:

    1. main() 函数定义了游戏环境,包括游戏初始化、开始游戏循环和结束游戏循环。
    2. 定义了一个结构体TU,它包含两个整型变量hl,分别代表角色的位置。
    3. 定义了一个函数mmax用于比较两个整数并返回较大的值。
    4. 定义了一个函数max用于比较三个或四个整数并返回最大的值。
    5. 定义了一个函数koko,接受一个指向结构体数组的指针以及两个二维数组和一个整数作为参数。
    6. 定义了一个主函数main,其中包含了游戏相关的逻辑。
    7. 游戏结束后,关闭文件流。

    根据你提供的错误信息,可以推断出以下几个问题可能出现在程序中:

    1. 错误:在koko函数内部,对于每个元素a[k].l,你需要计算c-1以确保位置从0开始。
    2. 错误:在for循环中的b[n-a[k].h][a[k].l]=1;语句中,使用了未声明的变量n
    3. 错误:在for循环外,尝试访问fang[k].hfang[k].l,这将导致越界错误。

    为了解决这些问题,你可以按照以下步骤进行修改:

    1. koko函数内部,应将a[k].l替换为c-1

      for(k=0;k<4;k++){
          a[k].l=a[k].l+(c-1);
      }
      
    2. n替换为m[k],以避免使用未声明的变量:

      for(k=0;k<4;k++){
          for(i=0;i<16;i++){
              if(b[i][m[k]]==1){
                  n=q[k];
                  break;
              }
          }
      }
      
    3. for循环外,应只检查fang数组:

      for(i=0;i<4;i++){
          for(j=0;j<4;j++){
              if(b[i][j]==1){
                  fang[k].h=i;
                  fang[k].l=j;
                  printf("%d %d\n",fang[k].h,fang[k].l);
                  k++;
              }
          }
      }
      

    修复这些错误后,你应该能够正确地执行游戏,并且不再遇到任何错误。

    评论

报告相同问题?