это мой первый пост здесь, так что если я сделаю какую-либо ошибку, пожалуйста, сообщите мне.
Так что я делаю эту мини-игру для своего класса, и мне нужно создать матрицу размера 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;
^~~~~~~~~~