DOMANDA [C] Popolare una matrice

gazel

Nuovo Utente
9
0
CPU
amd 9 9420
RAM
8
sto cercando di popolare questa matrice e ho dichirato una struct:
C:
struct Cella{
  enum Tipo_pericolo pericolo;
  enum Tipo_oggetto oggetto;
};
enum Tipo_pericolo{
  Nessun_pericolo,
  bomba };
enum Tipo_oggetto{
bandiera,
nessuna_bandiera
};
ho usato un punatore matrice di tipo struct e con la malloc ho riservato spazio e ho dichirarato una variabile popolamatrice di tipo struct cella
ora mi sono bloccato come uno stupido su questo...devo riempire la matrice randomicamente con nessun pericolo o bomba ma in questo punto sbaglio mi potreste spiegare cosa faccio di così abominevole?
matrice[i*n+j].popolamatrice.pericolo=Nessun_pericolo;
C:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "libreria.h"
enum Tipo_pericolo{
Nessun_pericolo,
bomba };
enum Tipo_oggetto{
bandiera,
nessuna_bandiera
};
struct Cella{
enum Tipo_pericolo pericolo;
enum Tipo_oggetto oggetto;
};
int main() {
  int a,n;
struct Cella  *matrice;
struct Cella popolamatrice;
printf("inserisci la dimensione della scacchiera, n*n \n");
scanf("%d", &n);
matrice=(struct Cella*)malloc(n*n*sizeof(struct Cella));
if (matrice == NULL) {
  printf("mi dispiace l'allocazione non è avvenuta con successo\n");
}
for (int  i= 0;  i<n; i++) {
for (int j = 0; j < n; j++) {
   srand(time(NULL));
   a=rand() % 2+1;
switch (a) {
  case 1: matrice[i*n+j].popolamatrice.pericolo=Nessun_pericolo;
        break;
  case 2: matrice[i*n+j].popolamatrice.pericolo=bomba;
        break;
      }
    }
}
}
[code]
ecco quello che ho scritto (la parte iniziale sarebbe inclusa nel file libereria.h ma qui l'ho riportata sopra)
 
Ultima modifica da un moderatore:

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,220
1,852
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
Così ad occhio sono almeno due gli errori: la struttura Cella non ha nessun membro chiamato popolamatrice; l'accesso agli elementi della struttura, trattandosi di un puntatore (matrice è un puntatore), avviene con ->.

Puoi comunque calcolare l'indice i*n fuori dal primo ciclo for.
 

Andretti60

Utente Èlite
6,440
5,091
Use the compiler, Luke...
E che la forza sia con te.
Post unito automaticamente:

l'accesso agli elementi della struttura, trattandosi di un puntatore (matrice è un puntatore),
Matrice è un puntatore, ma matrice[ ] è un suo elemento quindi i membri si accedono con il punto.
 

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,220
1,852
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
  • Mi piace
Reazioni: Andretti60

Ci sono discussioni simili a riguardo, dai un'occhiata!

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili