打印结构和枚举矩阵

时间:2019-07-05 08:17:29

标签: c

这是我在这里的第一篇文章,所以如果我有任何错误,请告诉我。 因此,我正在为我的班级制作这个迷你游戏,我需要(从输入中)创建一个n大小的矩阵,其中填充了一个枚举结构,该函数就是crea_scacchiera

当我想打印矩阵并传递给另一个函数(stampa_scacchiera)时,我尝试了一切,但找不到解决方法来打印出没有分割错误的矩阵

小游戏分为3个文件:仅显示菜单的main.c,定义枚举和结构的gamelib.h,以及具有创建和打印矩阵的函数的gamelib.c。

我认为矩阵已正确填充,我只是找不到在其他函数中打印矩阵的方法。

//gamelib.h
extern void crea_mappa();
extern void gioca();
extern void termina_gioco();

enum Tipo_pericolo {nessun_pericolo, trappola, alieno} pericolo;
enum Stato_giocatore {vulnerabile, scudo_vita, solo_vita, solo_scudo};
enum Tipo_oggetto {nessun_oggetto, medikit, pozione, materiale, colpi_lanciarazzi} oggetto;






struct Giocatore
{
  enum Stato_giocatore stato;
  int Posizione_x;
  int Posizione_y;
  int zaino[4];
  int alieni_uccisi;

};

struct Cella
{
  enum Tipo_pericolo pericolo;
  enum Tipo_oggetto oggetto;


};


//gamelib.c
#include "gamelib.h"
#include <stdio.h>
#include <stdlib.h>

//penso ci vadano anche dichiarazioni di variabili
int n;
void crea_scacchiera();
void stampa_scacchiera(struct Cella *scacchiera);
struct Cella *scacchiera= NULL;
static struct Giocatore Ninja;
static struct Giocatore Ciccio;

void crea_mappa()
{
   int choice;

  do {
  printf("                  \n");
  printf("Sceglia cosa fare\n");
  printf("1} crea scacchiera\n");
  printf("2} stampa scacchiera\n");
  printf("3} termina creazione\n");
  printf("                    \n");
  scanf("%d",&choice );

  switch (choice) {
    case 1 :
            crea_scacchiera();
            break;


    case 2 :
            printf("stampa della scacchiera in corso\n");
            stampa_scacchiera(scacchiera);
            break;


    case 3 :
            printf("ritorno al menu della mappa\n");
            system("clear");
            break;
  }
}
while (choice!=3);


}


void gioca()
{
  printf("prova funzione, gioca\n");
}


void termina_gioco()
{
  printf("prova funzione, termina gioco\n" );
}

void crea_scacchiera()
{
//  enum Tipo_oggetto oggetto;
  //enum Tipo_pericolo pericolo;
  int i,j,rows,cols;
  extern  int n;
  //static int perc1,perc2,perc3,perc4,perc5,perc6,perc7,perc8;
   printf("                                       \n ");
   printf("inserisci la grandezza della scacchiera\n ");
   scanf("%d",&n);\
     rows=n;
     cols=n;
     scacchiera = (struct Cella *)malloc(rows* cols* sizeof(struct Cella));
     //int offset = i * cols + j;
      for (i=0; i<n; i++){
        for (j=0; j<n; j++){


           scacchiera[i*cols+j].pericolo= trappola;




            scacchiera[i*cols+j].oggetto= pozione;


        }
      }

    Ninja.stato = solo_vita;
    Ninja.Posizione_x= rand()%n+1;
    Ninja.Posizione_y= rand()%n+1;
    Ciccio.stato = solo_vita;
    Ciccio.Posizione_x= rand()%n+1;
    Ciccio.Posizione_y= rand()%n+1;
    printf("%d\n",n );



}

 void stampa_scacchiera(struct Cella *scacchiera) //FuncB
{

int i,j,cols;
cols = n;
extern int n;
cols=n;

for (i=0; i<n; i++){
  for (j=0; j<n; j++){


  printf("oggetto scacchiera [%d] [%d] : %d\n",i,j,(scacchiera[i*cols+j]).oggetto );
  printf("pericolo scacchiera [%d] [%d] : %d\n",i,j,(scacchiera[i*cols+j]).pericolo );
 }
}


}

我现在已经修改了程序,这是给我的错误


  gamelib.c:154:39: error: declaration of ‘scacchiera’ shadows a global declaration [-Werror=shadow]
  void stampa_scacchiera(struct Cella *scacchiera) //FuncB
                                       ^~~~~~~~~~
gamelib.c:11:15: note: shadowed declaration is here
 struct Cella *scacchiera= NULL;
               ^~~~~~~~~~

1 个答案:

答案 0 :(得分:1)

您的程序存在严重的问题:

  1. 从不在代码中使用您的原始语言。 始终以英文书写(变量名,函数名等)。否则几乎没有人会打扰。

  2. 请勿使用诸如crea_之类的快捷方式名称。您节省了多少时间不键入这两个缺失的字母?当其他所有人都在看这个并想知道crea是什么时。是的,当然,“每个人”都知道,它是创建时的捷径。但是,不是每个人都是您,不是每个人都是英语大师,即使如此,破译您的“风格”(阅读:混乱)也要花费他们更多的时间。

  3. 格式很重要。否则,几乎没有人会再打扰。

  4. 尝试一下:

    scacchiera = (struct Cella *)malloc(rows* cols* sizeof(struct Cella));
    

代替

    int *scacchiera = (int *)malloc(rows* cols* sizeof(struct Cella));

您忘记初始化全局变量。

编辑:

  1. 在尝试分配给全局变量后,由于类型不匹配,编译器将对您发出咆哮。试试这个:

    scacchiera =(结构Cella *)malloc(行* cols * sizeof(结构Cella));

  2. 您还将无效值传递给printf(可能)。请尝试执行此操作(删除&运算符)。否则,您将打印变量的地址而不是其值。

    printf(“ oggetto scacchiera [%d] [%d]:%d \ n”,i,j,(scacchiera [i cols + j])。oggetto); printf(“ pericolo scacchiera [%d] [%d]:%d \ n”,i,j,(scacchiera [i cols + j])。pericolo);