struct in una cella di array bidimensionale

marcococ

Nuovo Utente
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?
 

DispatchCode

Utente Attivo
596
350
Hardware Utente
CPU
Intel i7 6700HQ, 2.60Ghz, 4 core 8 threads
Scheda Madre
Asustek
Hard Disk
Hitachi 7200 rpm, 1TB
RAM
16GB DDR4 (2 slot su 4)
Scheda Video
Nvidia Geforce GTX 960M, 4GB
Scheda Audio
Realtek
Sistema Operativo
Windows 10 64bit
Qual è il problema che incontri esattamente?
Dovrai generare l'indice della riga e della colonna, e inserire l'elemento (che dovrà ovviamente essere allocato).
 

DispatchCode

Utente Attivo
596
350
Hardware Utente
CPU
Intel i7 6700HQ, 2.60Ghz, 4 core 8 threads
Scheda Madre
Asustek
Hard Disk
Hitachi 7200 rpm, 1TB
RAM
16GB DDR4 (2 slot su 4)
Scheda Video
Nvidia Geforce GTX 960M, 4GB
Scheda Audio
Realtek
Sistema Operativo
Windows 10 64bit
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.
 

Andretti60

Utente Èlite
3,676
2,459
Hardware Utente
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)
Post automaticamente unito:

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.
 
  • Mi piace
Reactions: DispatchCode

marcococ

Nuovo Utente
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...
 

Andretti60

Utente Èlite
3,676
2,459
Hardware Utente
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.
 

marcococ

Nuovo Utente
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 ?
 

Andretti60

Utente Èlite
3,676
2,459
Hardware Utente
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.
 

Andretti60

Utente Èlite
3,676
2,459
Hardware Utente
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.
 

Zeus Giove

Nuovo Utente
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:

Entra

oppure Accedi utilizzando