struct in una cella di array bidimensionale

Pubblicità

marcococ

Nuovo Utente
Messaggi
29
Reazioni
1
Punteggio
21
salve, ho dichiarato una struct , struct Figura Cerchio......la devo mettere in modo casuale in una cella di una matrice allocata dinamicamente ....la matrice in questione punta ad una struttura di celle... (ling.C)
qualche suggerimento?
 
Qual è il problema che incontri esattamente?
Dovrai generare l'indice della riga e della colonna, e inserire l'elemento (che dovrà ovviamente essere allocato).
 
semplicemente lo scrivo ,ma lo scrivo in maniera sbagliata .....tipo questo...

matrice[rand()%lato+rand()%lato]= struct Cerchio ;
 
La matrice è rappresentata come array, o hai effettivamente N righe e M colonne?
Se il caso è il secondo stai sbagliando molte cose: prima di tutto così accedi alle righe, e inoltre sbagli ad assegnare.
In aggiunta, se la matrice non è quadrata, devi generare il numero utilizzando il valore corretto di righe e colonne.
 
la matrice è quadrata e l'ho creata allocandola dinamicamente cosi ....
matrice=malloc(righe*colonne*sizeof(struct Cella));
 
Non puoi assegnare una struttura a un’altra struttura, devo o cambiare la struttura originale o copiarne il contenuto.
 
Difficile risponderti se non sappiamo come sia dichiarata la variabile 'matrice' e cosa sia la "struttura di celle".
Sembra che tu stia facendo un poco di confusione (che e' normale, il linguaggio C e' ostico per questo tipo di cose)
E attento: se hai dichiarato la matrice come se fosse un puntatore di strutture di tipo Cella, non puoi poi usare una struttura diversa (come Cerchio)
--- i due messaggi sono stati uniti ---
semplicemente lo scrivo ,ma lo scrivo in maniera sbagliata .....tipo questo...

matrice[rand()%lato+rand()%lato]= struct Cerchio ;

a parte che non puoi assegnare una struttura a un puntatore, l'indirizzamento che fai del vettore e' sbagliato.
 
globalmente è dichiarata così:
static struct Cella *matrice= NULL ;

.......poi in una funzione la alloco diniamicamente..matrice=malloc(righe*colonne*sizeof(struct Cella)); ........
struct cella contiene invece due enum...
 
La allocazione e' esatta, ma il linguaggio C alloca solo memoria senza preoccuparsi di quello che ci metti. Se la variabile e' un puntatore a variabili di tipo Cella, NON puoi associare a loro una struttura di tipo diverso, punto. Ovvero, lo puoi fare, il linguaggio C non te lo impedisce, ma il programma non funzionera' mai. Questo e' uno dei grandi problemi del C, che e' anche il suo forte quando si scrivono programmi ottimizzati per l'accesso alla memoria (non per nulla e' ancora usato per applicazioni tipo database, device drivers e embedded)

Ad ogni modo: hai una memoria allocata, per elementi di tipo Cella.
Per accedere al puntatore del primo elemento, basta un: struct Cella *c = matrice;
Per accedere all'elemento [i,j] devi usare struct Cella *c = &matrice[i * colonne + j];
Una volta che hai il puntatore di un elemento, lo puoi cambiare come vuoi.
 
quindi se facessi
struct Cella *Ciccio= &scacchiera[2*lato+4];
in un ipotetica cella della scacchiare avrei una struct Cella , ed una struct Giocatore....ad esempio?

qui è dove ho dichiarato le struct , enum ecc...
Codice:
#ifndef GAMELIB_H
#define GAMELIB_H

#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <string.h>
#include <unistd.h>
#include <math.h>


void gioca();
void crea_mappa();
void termina_gioco();




enum Tipo_pericolo{
  nessun_pericolo,
  trappola,
  alieno
};

enum Stato_giocatore{
  vulnerabile,
  scudo_vita,
  solo_vita,
  solo_scudo
};

enum Tipo_oggetto{
  nessun_oggetto,
  medikit,
  pozione,
  materiale,
  colpi_lanciarazzi
};

struct Giocatore {
    enum Stato_giocatore stato;
  int x;
  int y;
    unsigned short int zaino[3];
    unsigned int short uccisioni_alieni;
};

struct Cella{
  enum Tipo_pericolo pericolo;
  enum Tipo_oggetto oggetto ;
};


#endif


Qui Ciccio è una struct Giocatore, però se dichiaro una cosa del genere//struct Cella *Ciccio= &scacchiera[2*lato+4]// quando accedo agli elementi della struct come ad esempio ..... Ciccio->zaino[nessun_oggetto]=0; mi dà errore perchè "struct Cella’ has no member named ‘zaino’"
come posso fare per accedere in questo modo agli elementi e poterli quindi gestire ?
 
Quello che stai dicendo non ha assolutamente alcun senso.
Se la tua scacchiera è dichiarata come una matrice di tipo Cella, puoi accederla solo come elementi di tipo Cella, e basta.
Se dichiari un vettore di interi, puoi forse accedere ai suoi elementi come se fossero double, o string? Per piacere.
 
ok faccio confusione scusami, quindi è impossibile associare la struct giocatore ad una cella della matrice...........
 
Poiche' non ho idea di quello che il tuo programma debba fare, non ti posso rispondere.
Ma in genere NIENTE e' impossibile. Bisogna semplicemente organizzare bene i nostri dati, quella e' la prima cosa da fare quando si progetta un programma. Se si parte con il piede sbaglaito e' come costruire un grattacielo avendo le fondamenta di una capanna di paglia. Nel mio lavoro, organizzare come i dati vengano rappresentati occupa la maggior parte del tempo, il resto (programmare) e' facile.
 
Tutto dipende da perché lo vuoi fare, quale vantaggio avresti nell'avere un array di un tipo dati che contenga informazioni di un altro tipo? Poi fattibile é fattibile, ma perdi l'uso della matrice in quei punti
 
Ultima modifica:
Pubblicità
Pubblicità
Indietro
Top