SeeYagain 2023-06-19 21:42 采纳率: 100%
浏览 24
已结题

C语言struct type redifinition

C语言头文件中重复定义struct,但是我只在头文件这定义了struct阿,怎么办


//头文件
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#include<math.h>



#define NUM 5
#define PI 3.14

void initBall(struct BALL ball[],int num);
int moveBall(struct BALL ball[],int num);
void redrawCWin(struct BALL ball[],int num);
void delay(int nTime);
int randX(void);
int randY(void);
int randA(void);
int randC(void);
double distBetweenBalls(struct BALL ball[],int k,int i);
void initCharPicture(char cWin[24][80]);





struct BALL
{
    char body[2];
    int sel;
    int wX;
    int wY;
    double X;
    double Y;
    double dX;
    double dY;
};

//子函数

#include "head.h"

void initBall(struct BALL ball[],int num)
{
   int i,j;
   for(i=0;i<NUM;i++)
   {
       j=randA();
       ball[i].body[0]='@';
       ball[i].body[1]='*';
       ball[i].sel=randC();
       ball[i].X=randX();
       ball[i].Y=randY();
       ball[i].wX=(int)(ball[i].X+0.5);
       ball[i].wY=(int)(ball[i].Y+0.5);
       ball[i].dX=cos((j*PI)/180);
       ball[i].dY=sin((j*PI)/180);
   }
}
   
int randX()
{
    int a;
    a=rand()%22+1;
    return a;
}

int randY()
{
    int a;
    a=rand()%77+1;
    return a;
}

int randA()
{
    int a;
    a=rand()%359+1;
    return a;
}

int randC()
{
    int a;
    a=rand()%2;
    return a;
}


double distBetweenBalls(struct BALL ball[],int k, int i)
{
    double dist;
    dist=sqrt((ball[k].X-ball[i].X)*(ball[k].X-ball[i].X)+(ball[k].Y-ball[i].Y)*(ball[k].Y-ball[i].Y));
    return dist;
}

int moveBall(struct BALL ball[],int num)
{
    int i;
    int t=0;//


    for(i=0;i<num;i++)
    {
        ball[i].X+=ball[i].dX;
        ball[i].Y+=ball[i].dY;
    }

    for(i=0;i<num;i++)
    {
        if(ball[i].X>23)
        {
            putchar('\a');
            t++;
        }

        if(ball[i].X<0||ball[i].X>23)
        {
            ball[i].dX=-ball[i].dX;
            ball[i].X+=ball[i].dX;
        }


        if(ball[i].Y<0||ball[i].Y>79)
        {
            ball[i].dY=-ball[i].dY;
            ball[i].Y+=ball[i].dY;
        }

        else
        {
            ball[i].wX=(int)(ball[i].X+0.5);
            ball[i].wY=(int)(ball[i].Y+0.5);
        }


        int j;
        for(j=i+1;j<num;j++)
        {
            double dist=distBetweenBalls(ball,i,j);
            if(dist<1)
            {
                double swap;
                swap=ball[i].dX;
                ball[i].dX=ball[i].dY;
                ball[i].dY=swap;
                if(ball[i].sel==0)
                    ball[i].sel=1;
                else
                    ball[i].sel=0;


                swap=ball[j].dX;
                ball[j].dX=ball[j].dY;
                ball[j].dY=swap;
                if(ball[i].sel==0)
                    ball[j].sel=1;
                else 
                    ball[j].sel=0;
            }
        }
        ball[i].wX=(int)(ball[i].X+0.5);
        ball[i].wY=(int)(ball[i].Y+0.5);
    }
    return t;
}

void redrawCWin(struct BALL ball[],int num)
{
    char cWin[24][80];
    initCharPicture(cWin);
    moveBall(ball,num);

    int i,j;
    for(j=0;j<num;j++)
        cWin[ball[j].wX][ball[j].wY]=ball[j].body[ball[j].sel];

    for(i=0;i<24;i++)
    {
        puts(cWin[i]);
    }
}

void delay(int nTime)
{
    int i,j;
    for(i=0;i<nTime;i++)
        for(j=0;j<200000;j++);
}

void initCharPicture(char cWin[24][80])
{
    int i,j;
    for(i=0;i<24;i++)
    {
        cWin[i][79]='\0';
        cWin[i][0]='|';
        cWin[i][78]='|';
    }
    for(i=1;i<78;i++)
    {
        cWin[0][i]='-';
        cWin[23][i]='-';
    }
    for(i=1;i<23;i++)
    {
        for(j=1;j<78;j++)
        {
            cWin[i][j]='.';
        }
    }
}

//主函数

#include "head.h"
#include "Myfuncs.cpp"
#include "time.h"





void main()
{
    int n;
    printf("请输入弹球数目:");
    scanf("%d",&n);

    if(n<1)
        n=1;
    if(n>NUM)
        n=NUM;

      srand((unsigned)time(NULL));
    struct BALL ball[NUM];
    initBall(ball,n);

    while(1)
    {
        delay(2000000);
        redrawCWin(ball,n);
    }
}




  • 写回答

2条回答 默认 最新

  • threenewbee 2023-06-19 22:04
    关注

    #include "Myfuncs.cpp"
    实际上Myfuncs.cpp和主程序放在一起,去掉Myfuncs.cpp就可以了。
    这个造成了主程序把 "Myfuncs.cpp" 的内容又写了一遍,当然重复定义了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 6月28日
  • 已采纳回答 6月20日
  • 创建了问题 6月19日